让我们假设我们有以下对象:C++掌握对象的ID在运行时
struct A{
static const int ID = 1;
};
struct B{
static const int ID = 2;
};
struct C{
static const int ID = 3;
};
struct D{
static const int ID = 4;
};
struct Collection{
std::vector<A> o1;
std::vector<B> o2;
std::vector<C> o3;
std::vector<D> o4;
};
Collection collection;
我想要做的越来越引用一些vector
S中Collection
的。应该有三种不同的方式来获取这些:
通过类型
vector
,例如collection.get<A>();
由编译时的ID决定,它是由
vector
所保存的每个对象定义的。collection.get<4>();
- 通过运行时的ID,例如
collection.get(id);
案例1很容易,因为它可以通过T::ID
转换为案例2。情况2可以通过模板专门化来实现(尽管如果我有很多对象,它看起来很难看)。 案例3造成了很多麻烦。没有一些巨大的if
或switch
声明它几乎不可能,更不用说推断返回类型。
我的问题是:
- 有没有一种方法,使案件2更优雅?
- 我该如何实施案例3?
只会有'A,B,C,D'吗? –
可能不会,至少有30个。 – Overblade
您有一个运行时间值。你不知道它是什么。您需要根据该值操作不同的类型,这意味着完全不同的代码路径(即使它是同一个函数模板的不同实例化)。这意味着一个运行时分支。所以,你可以有一个'switch'或'map' - 这些都是你的选择。 –
Useless