假设我有200个名为class1,class2等的类,派生自类,以及1到200之间的整数。有没有办法根据我的整数值明确地实现派生类之一?显然我可以手动检查每个值,但我想知道C ++中有什么更灵活的
答案 0 :(得分:5)
您必须对整数进行切换,并实例化特定的类。如果你有这个int
- >在程序中的其他地方使用class
逻辑,您可以考虑使用编译时映射来表示它。请看Boost.MPL,特别是boost::mpl::map
。
答案 1 :(得分:2)
这可能只是做同样事情的一种较长方式,但你可以为每个派生类设置一个工厂方法,如此...
std::auto_ptr<BaseClass> createClass0()
{
return std::auto_ptr<BaseClass>(new Class0());
}
然后定义这些函数的数组
typedef std::auto_ptr<BaseClass> (*pt2Creator)();
pt2Creator creators[] = {createClass0, ...};
然后,你可以做
std::auto_ptr<BaseClass> createClass(int n)
{
return creators[n]();
}
如果你不想为每个类编写代码,这对你没有帮助,但是如果问题是在运行时弄清楚要基于整数创建哪个类,这样就可以了
您可能还想使用标准集合类型而不是C样式数组。
答案 2 :(得分:1)
如果您正在寻找一个反射类型系统,您可以在其中查看所有类,然后动态实例化它们。您可以在运行时对象上使用typeid来查看它们是否相同,但我相信它的行为是实现定义的。
答案 3 :(得分:1)
如果您可以为您的课程设置模板,即将其命名为
template <int I> class Foo;
而不是
class FooI
您可以使用编译时或运行时数据结构来选择合适的类。