【问题标题】:Using a boost signal within boost::bind在 boost::bind 中使用 boost 信号
【发布时间】:2010-09-21 22:17:30
【问题描述】:

我正在尝试将 boost::signal 的触发封装到 boost::bind 对象中。所以我想要的是在调用 boost::function 时使用一些预先打包的参数调用信号。

我拥有的是这样的:

boost::signals2::signal<void(int)> sig;
boost::function<void()> f = boost::bind(
    &(sig.operator()), &sig, 10);

但这不起作用。我收到以下错误: 错误:没有匹配的函数调用 bind(, ...

我也试过这个:

boost::function<void()> f = boost::bind(
    (void(boost::signals2::signal<void(int)>::*)(int))
    &(sig.operator()), &sig, 10);

然后我得到“没有上下文类型信息的重载函数的地址。”

那么正确的语法是什么?

【问题讨论】:

    标签: c++ boost boost-bind boost-signals


    【解决方案1】:

    boost::signals2::signal 的实例是一个函数对象(又名函子),可以直接绑定,如 here 所述。在这种情况下,唯一的问题是信号是不可复制的,因此它不能被复制到 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 2023-04-07
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      相关资源
      最近更新 更多