【发布时间】:2011-12-18 03:14:23
【问题描述】:
我正在用 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 系统?如果没有,有什么想法可以让我更轻松、更普遍地实现这一点(最好以与我的实际用例无关的方式)?
【问题讨论】:
-
C++ 中已经存在的 RTTI 有什么问题?它如何满足您的需求?
-
@Nicol 从 C++ 的角度来看,Python 类型只是 PyObject(或 boost::python::object)的实例,因此原生 RTTI 并不好。它怎么可能起作用? C++ 的 RTTI 仅适用于编译时的 C++ 类型,而不是运行时的 Python。
标签: c++ python rtti boost-python