C++ 有没有办法将boost信号和插槽用于不可复制的对象?
我想把一个不可复制的对象传递给一个增强信号。请参阅下面的代码(不编译)。有可能的解决办法吗C++ 有没有办法将boost信号和插槽用于不可复制的对象?,c++,boost,C++,Boost,我想把一个不可复制的对象传递给一个增强信号。请参阅下面的代码(不编译)。有可能的解决办法吗 #include <boost/signals2.hpp> #include <iostream> #include <memory> struct MySlot { void operator()(std::unique_ptr<int>&& input) const { std::cout << "Signa
#include <boost/signals2.hpp>
#include <iostream>
#include <memory>
struct MySlot
{
void operator()(std::unique_ptr<int>&& input) const
{
std::cout << "Signaled " << *input.get();
}
};
int main(int argc, char* argv[])
{
boost::signals2::signal<void(std::unique_ptr<int>)> signal;
signal.connect(MySlot());
auto ptr = std::make_unique<int>(20);
signal(std::move(ptr));
}
#包括
#包括
#包括
结构MySlot
{
void运算符()(std::unique_ptr&&input)常量
{
std::coutUPDATE我误解了这个问题。您不希望处理程序类型本身不可复制,而是希望它们的参数不可复制
答案是:不,信号2没有移动感知
注意一般情况下,您不应该出现这种情况,因为许多连接可以订阅同一个插槽,并且您只能从参数中移动一次。在所有情况下,最好传递副本/常量引用:
#include <boost/signals2.hpp>
#include <iostream>
#include <memory>
struct MySlot
{
void operator()(std::unique_ptr<int> const& input) const
{
std::cout << "Signaled " << *input.get();
}
};
int main()
{
boost::signals2::signal<void(std::unique_ptr<int> const&)> signal;
signal.connect(MySlot());
auto ptr = std::make_unique<int>(20);
signal(ptr);
}
#包括
#包括
#包括
结构MySlot
{
void运算符()(std::unique_ptr const&input)const
{
是的。有可能将多个插槽连接到一个信号。我完全忘记了。谢谢你的回答。