У меня есть один базовый класс, который содержит map
для таких указателей на функции, как это
typedef void (BaseClass::*event_t)();
class BaseClass {
protected:
std::map<std::string, event_t> events;
public:
// Example event
void onFoo() {
// can be added easily to the map
}
};
Обработка этого префекта работает, но теперь я хочу сделать BaseClass
абстрактный базовый класс, производный от которого, вот так:
class SpecificClass : public BaseClass {
public:
void onBar() {
// this is gonna be difficult!
}
};
Хотя я могу получить доступ к карте с SpecificClass
, я не могу добавить onBar
, потому что тип event_t
определен только для BaseClass
! Есть ли возможность (возможно, с шаблонами?), Которая не приводит к определению event_t
для каждого класса, который я буду использовать ...
(Использовать шаблоны не обязательно! Любой хороший / подходящий подход был бы хорош.)
Дополнительная справочная информация:
Это все для текстовой RPG. Мой базовый класс может называться Location
, а указанный может быть в любом месте, например CivicCenter
. Каждый объект Location
подписывается на мой EventSystem
, который уведомляет все необходимые объекты, когда я запускаю событие. Поэтому я хочу сохранить на карте некоторые указатели на частные функции, содержащие действия с их «именем», таким как onSetOnFire
(xD) в качестве ключа.