C ++ - 根据上下文实例化派生类

时间:2011-10-24 17:58:37

标签: c++

假设我有200个名为class1,class2等的类,派生自类,以及1到200之间的整数。有没有办法根据我的整数值明确地实现派生类之一?显然我可以手动检查每个值,但我想知道C ++中有什么更灵活的

4 个答案:

答案 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

您可以使用编译时或运行时数据结构来选择合适的类。