我有大量的子类订阅了各种事件,例如初始化和实体删除。
目前我通过
来解决这个问题class A{ static void init(); void kill(ID); }
class B{ static void init(); void kill(ID); }
class C{ static void init(); void kill(ID); }
A::init();
B::init();
C::init();
其中,使用多行编辑器并不困难,并且阅读起来很简单,但是存在很多错误的空间,大多数都记得将每个新类添加到调用部分,而不是类像动态多态一样添加自己。
如何使用静态多态来将其转换为类似于
的形式//interface, with default behavior implementation
class W{ static void init(){...} void kill(ID){...} }
class A : W<A> {}
class B : W<B> { static void init(){...} }
constexpr auto w_classes = magic_classlist(A, B, ...)
w_classes::init();
使用对象方法,可以轻松制作一个static_casted对象列表 但我需要类功能。所以要创建一个可迭代的类列表,而不是手动将它们添加到模板中,理想情况下通过继承超类,如果可能的话。
答案 0 :(得分:1)
也许以下内容对您来说已经足够了:
template <typename ... Ts>
class magic_classlist
{
static void init()
{
(Ts::init(), ...); // C++17, but can be done for C++11
}
};
然后:
constexpr auto w_classes = magic_classlist<A, B, ...>();
w_classes::init();