C++ 在boost::bind中使用boost信号
我试图将boost::signal的触发封装到boost::bind对象中。因此,我想要的是在调用boost::函数时使用一些预先打包的参数调用信号 我所拥有的是:C++ 在boost::bind中使用boost信号,c++,boost,boost-bind,boost-signals,C++,Boost,Boost Bind,Boost Signals,我试图将boost::signal的触发封装到boost::bind对象中。因此,我想要的是在调用boost::函数时使用一些预先打包的参数调用信号 我所拥有的是: boost::signals2::signal<void(int)> sig; boost::function<void()> f = boost::bind( &(sig.operator()), &sig, 10); boost::signals2::sig; boost::函数
boost::signals2::signal<void(int)> sig;
boost::function<void()> f = boost::bind(
&(sig.operator()), &sig, 10);
boost::signals2::sig;
boost::函数f=boost::bind(
&(sig.operator(),&sig,10);
但这不起作用。我得到以下错误:
错误:没有匹配的函数用于调用绑定(
我也试过:
boost::function<void()> f = boost::bind(
(void(boost::signals2::signal<void(int)>::*)(int))
&(sig.operator()), &sig, 10);
boost::function f=boost::bind(
(无效(升压::信号2::信号::*)(int))
&(sig.operator(),&sig,10);
但是我得到了“没有上下文类型信息的重载函数的地址”
那么什么是正确的语法呢?boost::signals2::signal的一个实例是一个函数对象(又称functor),并且可以直接绑定,如前所述。这种情况下唯一的问题是信号不可复制,因此无法将其复制到bind返回的对象中。因此,首先必须使用boost::ref将其包装。以下是一个示例:
#include <boost/signals2.hpp>
#include <boost/bind.hpp>
#include <boost/ref.hpp>
int main(void)
{
boost::signals2::signal<void(int)> sig;
boost::function<void()> f = boost::bind(boost::ref(sig), 10);
}
#包括
#包括
#包括
内部主(空)
{
boost::signals2::sig信号;
boost::function f=boost::bind(boost::ref(sig),10);
}