0
我现在有一个问题。我正在尝试封装boost :: signal和boost :: bind到我自己的Event类中。封装boost :: signal和boost :: bind
class MyEvent
{
private:
boost::signal<void()> Sig;
public:
void Subscribe(.........)
{
Sig.connect(boost:bind(.........);
}
void Raise()
{
Sig();
}
};
我已经尝试在订阅功能的签名和视觉工作室传递函数指针只是给了我错误的语气。 我不知道如何写订阅的签名和什么进入boost :: bind,理想情况下,我将在订阅功能中有boost::bind(&MyClass::MyHandler, &MyClassObject)
,并将其称为外部,如MyEventObject.Subscribe(&MyClass::MyHandler, &MyClass)
。 任何人都可以帮我填补那两个空白吗?
谢谢伊戈尔。我的老板要求我封装它,以避免在任何地方升级lib。我真的想要公开它,因为它更灵活使用boost :: signal – cynric4sure 2013-05-06 13:43:11
@ cynric4sure你的意思是你需要消除接口的提升?然后,请注意以下几点:1)您的类仍然在其定义中公开'boost :: signals'(尽管它是'private'),因此用户的代码将依赖于boost头文件。你可能想通过pImpl来隐藏它; 2)你不必限制用户指向成员函数的指针!相反,接受任何可调用,并让用户使用'std :: bind'或任何他想要的来创建它。 – 2013-05-06 14:22:01