У меня есть один базовый класс, который содержит карту
для таких указателей функций
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
подписывается на мою EventSystem
, которая уведомляет все необходимые объекты, когда я запускаю событие. Поэтому я хочу сохранить на карте некоторые указатели на частные функции, содержащие действия с их «именем», например onSetOnFire
(xD) в качестве ключа.