我在这样的 gui 类中使用 boost::signals2::signal :
class GuiElement {
//...
typedef boost::signals2::signal<void(GuiElement &)> GuiElementSignal;
virtual GuiElementSignal &getSignal() { return signal_; };
}
所有 gui 类都继承自此类,以便可以注册回调。一个Toggle
类的例子:
toggle.getSignal().connect([](lx::GuiElement &el) {
// cast to access toggle specific functions
state = static_cast<lx::Toggle &>(el).state();
cout << state << endl;
});
每次我必须强制GuiElement
转换为 aSpecificClass
以访问特定的类函数时,都在回调函数内部。我想避免这种转换并将回调签名声明为:toggle.getSignal().connect([](lx::Toggle &el) {...
有没有办法用模板来实现这一点,比如typedef boost::signals2::signal<void(T &)> GuiElementSignal
用类替换 T ?