如何使用不可复制的对象作为具有boost :: signals2 :: signal的插槽

时间:2013-08-01 17:40:59

标签: boost boost-signals2

我有一个不可复制对象的实例,我想用一个boost signal2。 connect方法希望我的仿函数可以复制。有办法解决这个问题吗?如何删除以下代码中的注释?

#include <iostream>
#include <boost/signals2.hpp>

struct Noncopyable
{
  Noncopyable() {};
  void operator()() { std::cerr << "hi Noncopyable" << std::endl; }
 private:
  Noncopyable(Noncopyable const&);
};

int main(void)
{
  Noncopyable no_copy;
  boost::signals2::signal<void ()> sig;
  //sig.connect(no_copy);
  sig();
}

有没有办法将对no_copy对象的引用传递给connect方法?

1 个答案:

答案 0 :(得分:1)

使用boost::ref(或std::ref)函数通过引用传递此类对象:

#include <iostream>
#include <boost/signals2.hpp>
#include <boost/ref.hpp>

struct Noncopyable
{
  Noncopyable() {};
  void operator()() { std::cerr << "hi Noncopyable" << std::endl; }
 private:
  Noncopyable(Noncopyable const&);
};

int main(void)
{
  Noncopyable no_copy;
  boost::signals2::signal<void ()> sig;
  sig.connect(boost::ref(no_copy));
  sig();
}

当然,确保no_copy对象至少与sig连接时保持一致。