我有一个不可复制对象的实例,我想用一个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
方法?
答案 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
连接时保持一致。