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);
  }