0

我有一个不可复制对象的实例,我想将其与增强信号 2 一起使用。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方法?

4

1 回答 1

1

使用boost::ref(or 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.

于 2013-08-01T21:26:03.893 回答