C++ 使用匿名或lambda功能连接到升压信号2信号
我尝试执行以下操作,以便从增压信号接收字符串并将其发送到显示器。以下语法不正确C++ 使用匿名或lambda功能连接到升压信号2信号,c++,events,boost,signals,C++,Events,Boost,Signals,我尝试执行以下操作,以便从增压信号接收字符串并将其发送到显示器。以下语法不正确 signal<void (const char*)> UserMessageEvent; // connect anonymous boost function to display message box on user message event UserMessageEvent.connect(boost::bind(AfxMessageBox, _1)
signal<void (const char*)> UserMessageEvent;
// connect anonymous boost function to display message box on user message event
UserMessageEvent.connect(boost::bind(AfxMessageBox, _1));
有什么建议吗
编辑:
msvc10给出的错误是错误C2914:“boost::bind”:无法推断模板参数,因为函数参数不明确AfxMessageBox有多个重载和默认参数,这使得上述构造模棱两可。编写一个小函数,只取一个LPCSTR,它将转发到AfxMessageBox,并将其绑定到信号 编辑: 由于有些人似乎不喜欢我上面提供的内容(为什么不发表评论就投否决票?),下面是我上面所写内容的一些澄清代码:
int MyMessageBox(LPCSTR msg)
{
return AfxMessageBox(msg);
}
UserMessageEvent.connect(boost::bind(MyMessageBox, _1));
我不知道boost::bind在默认参数方面的行为 无论如何,以下是lambda的语法:
UserMessageEvent.connect( [](const char* message)
{
// maybe need here a conversion to LPCWSTR ?
AfxMessageBox(message);
});
AfxMessageBox是u stdcall函数,要支持此类函数,您需要在之前定义BOOST _BIND _ENABLE stdcall,包括:
\define BOOST\u BIND\u ENABLE\u STDCALL
#包括
int _tmain(int argc,_TCHAR*argv[]
{
boost::bind(
&AfxMessageBox,L“,0,0);
}
您确定您的示例不起作用吗?我不明白为什么它在boost::signal方面不起作用……我认为这与AfxMessageBox的三个参数有关,或者const char*到LPCSTR的转换必须以某种方式显式进行?这完全符合我的预期。事实证明,不需要从const char*类型转换。boostlambda函数文档对这些东西不是很清楚!boost Signal2是否也支持声明(捕获)lambda?就所问问题而言,这是正确的答案(由于函数重载)<代码>boost::bind不知道调用哪个版本的重载。
UserMessageEvent.connect( [](const char* message)
{
// maybe need here a conversion to LPCWSTR ?
AfxMessageBox(message);
});
#define BOOST_BIND_ENABLE_STDCALL
#include <boost\bind.hpp>
int _tmain(int argc, _TCHAR* argv[])
{
boost::bind<int, LPCTSTR>(
&AfxMessageBox, L"", 0, 0);
}