Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在boost::bind中使用boost信号_C++_Boost_Boost Bind_Boost Signals - Fatal编程技术网

C++ 在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::signal的触发封装到boost::bind对象中。因此,我想要的是在调用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);
}