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(または) 関数を使用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 に答える