使用C ++ 11自动注册派生类

时间:2017-03-03 10:49:35

标签: c++ c++11 templates

与其他用户一样,我正在努力实现一些不可能或非常复杂的事情。我读了很多问题,比如“迭代所有派生类”,但正如我所看到的,这是不可能的。但我想问一下可以自动注册派生类。也许使用一些模板。或者例如使用具有特殊名称的模板函数(例如template<typename T> void register(SomeFabric* f, T* t = new T()))并遍历所有“已注册”类型(如果可能,则为ofc)。或者使用另一个特殊函数(例如void register(SomeFabric* f, Base* base))并遍历所有可用的类,如果可以使用此参数调用此特殊函数,并且可以实例化iteratable类 - 调用它。 如果完全不可能:注册课程的最简单(开发人员行动最少)的方式是什么?

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是在基类静态字段中保留派生类的列表:

static vector<*BaseClass> children; 

然后在BaseClass构造函数中注册新实例:

children.push_back(this)

从基类析构函数中的注册表删除

不要忘记从派生类调用父构造函数

Derived(int a, int b) : BaseClass() {...}

请注意,虽然此解决方案可行,但从结构点来看,很差。它介绍了全球状态以及与之相关的所有问题。