Я хочу добиться следующего поведения.
В базовом классе я хочу иметь контейнер для хранения указателей на методы производного класса. (Я хочу хранить там h1 и h2).
Базовый класс также реализует методы, позволяющие хранить эти указатели и сам контейнер
Пока еще нет готового кода, потому что мне интересно, возможно ли это вообще — например:
template<typename E, typename S>
using Map = std::unordered_map<E, std::function<S* (S&, void)>>;
template<typename E, typename S>
class Base {
someFunctToPutPointersIntoMap() {}
Map<E, S> mEventMap;
}
template<typename E, typename S>
class Derived: public Base<E, S> {
public:
Derived* h1(void) {};
Derived* h2(void) {};
};
Однако как тогда я могу объявить объект производного класса? Для меня его параметры являются рекурсивными, например.
Derived<E, Derived<E, Derived<E, Derived<E, ...etc... > object;
Так что это никогда не скомпилируется. Я уверен, что есть какой-то способ справиться с этим, однако я понятия не имею.
Задача ещё не решена.
Других решений пока нет …