У меня есть большое количество подклассов, которые подписываются на различные события, такие как инициализация и удаление объектов.
В настоящее время я решаю это, делая
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 легко.
Но мне нужны классы-функции. Таким образом, составить итеративный список классов, не добавляя их вручную в шаблон, в идеале, если это возможно, наследуя суперкласс.