我正在为游戏制作 Gui Api。用户始终可以在小部件上使用继承并覆盖,但我想要回调。我想使用模板化回调系统:
因此,如果他们想要为鼠标创建一个鼠标,他们可以从带有 mouseargs 的模板化回调基础版本继承:
所以基础看起来像这样:
template <typename T>
class AguiEventCallback {
public:
virtual void callback(AguiWidget* sender, T arg) = 0;
};
像这样将模板与多态性混合是一个好主意吗?我最好为我需要的每种类型(鼠标、键盘、游戏 handle 等)创建回调吗?
谢谢
最佳答案
看看 boost::function 和 boost::bind。接受一个带有针对特定事件定义的参数列表的函数对象,调用者可以做他们想做的事情。
这为回调实现提供了很大的灵活性,并且生成事件的对象需要更少的回调实现知识。
例如:
typedef boost::function<void (AguiWidget* sender)> CallbackFunc;
void register_callback(CallbackFunc const& f);
客户:
class Caller {
void do_register() { register_callback(bind(&Caller::event, this, 123, _1)); }
void event(int arg, AguiWidget* sender) { ... }
};
仅显示函数/绑定(bind),忽略许多其他问题;例如。内存管理,对象生命周期。
关于c++ - 模板化的多态回调是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4161588/