Я разрабатываю игровой движок на C ++, который позволяет создавать скрипты на Python. Вот пример того, как в Python могут быть определены функции, которые затем вызываются менеджером событий при возникновении определенного события:
# Import some classes defined in C++
from cpp.event import PlayerDiesEvent, EventManager
def onPlayerDeath(event):
pass
em = EventManager()
em.connect(PlayerDiesEvent, onPlayerDeath)
em.post(PlayerDiesEvent(...)) # Will call `onPlayerDeath`
Пользователь также может определять новые типы событий:
from cpp.event import Event, EventManager
class CustomEvent(Event):
pass
def onCustomEvent(event):
pass
em = EventManager()
em.connect(CustomEvent, onCustomEvent)
em.post(CustomEvent())
Однако я также хотел бы, чтобы система обмена сообщениями работала с наследованием, чего в настоящее время нет. Вот что я имею в виду:
from cpp.event import PlayerDiesEvent, EventManager
class CustomEvent(PlayerDiesEvent):
pass
def onPlayerDeath(event):
pass
def onCustomEvent(event):
pass
em = EventManager()
em.connect(PlayerDiesEvent, onPlayerDeath)
em.connect(CustomEvent, onCustomEvent)
# This notifies both functions, because `CustomEvent` is a `PlayerDiesEvent`
em.post(CustomEvent(...))
# This notifies only `onPlayerDeath`
em.post(PlayerDiesEvent(...))
tld; dr: Существует ли какая-либо библиотека C ++, которая позволила бы мне более легко создавать пользовательскую систему RTTI, которая работает с наследованием? Если нет, есть какие-нибудь идеи, как я мог бы реализовать это более легко и, возможно, более широко (предпочтительно таким образом, который не зависит от моего фактического варианта использования)?