Есть ли способ подключить слоты к сигналу? т. е. я хочу скопировать слоты сигнала из одного экземпляра класса в другой
У меня есть сигнал в моем классе, и я столкнулся со следующей ошибкой. Вероятно, это связано с тем, что этот класс используется в контейнерах STL.
1>c:\boost_1_52_0\boost\signals\detail\signal_base.hpp(150): error C2248: 'boost::noncopyable_::noncopyable::noncopyable' : cannot access private member declared in class 'boost::noncopyable_::noncopyable'
1> c:\boost_1_52_0\boost\noncopyable.hpp(27) : see declaration of 'boost::noncopyable_::noncopyable::noncopyable'
1> c:\boost_1_52_0\boost\noncopyable.hpp(22) : see declaration of 'boost::noncopyable_::noncopyable'
1> This diagnostic occurred in the compiler generated function 'boost::signals::detail::signal_base::signal_base(const boost::signals::detail::signal_base &)'
1> test.cpp
Итак, я решил поставить конструктор копирования и подключить сигнал к слотам сигнала параметра, и тогда я получаю следующую ошибку:
1>d:\workarea\boostsignalsEx\test.h(26): error C2663: 'boost::signal1<R,T1>::connect' : 2 overloads have no legal conversion for 'this' pointer
1> with
1> [
1> R=void,
1> T1=int
1> ]
Если я удалю квалификатор const для параметра конструктора копирования, я получу еще одну ошибку.
1>d:\workarea\boostsignalsEx\test.h(40): error C2558: class 'test' : no copy constructor available or copy constructor is declared 'explicit'
Это пример кода, над которым я работаю
class test{
public:
boost::signal1<void, int> sig;
test(const test& t) { t.sig.connect(sig);};
void attach(boost::function1<void, int> f) {sig.connect(f);}
};
предположим, что цепочка сигналов не будет работать, потому что я не уверен, что объект параметра конструктора копирования будет жить «этот» объект