Bri*_*ian 4 c++ boost boost-bind boost-signals
我正在尝试将boost :: signal的触发包装到boost :: bind对象中.所以我想要的是在调用boost :: function时用一些预先打包的参数调用信号.
我有的是这个:
boost::signals2::signal<void(int)> sig;
boost::function<void()> f = boost::bind(
&(sig.operator()), &sig, 10);
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我收到以下错误:错误:没有匹配函数调用bind(,...
我也试过这个:
boost::function<void()> f = boost::bind(
(void(boost::signals2::signal<void(int)>::*)(int))
&(sig.operator()), &sig, 10);
Run Code Online (Sandbox Code Playgroud)
但后来我得到了"没有上下文类型信息的重载函数的地址".
那么什么是正确的语法?
升压:: signals2 ::信号的一个实例是一个功能对象(又名仿函数),并且可以直接结合,如所描述这里.在这种情况下唯一的问题是信号是不可复制的,因此它不能被复制到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);
}
Run Code Online (Sandbox Code Playgroud)