class Whatever
{
public:
virtual ~Whatever();
protected:
Whatever();
virtual void SomeMethod();
void OnEventOccurred(int x);
std::vector<boost::signals2::scoped_connection> boostSignalConnections_;
}
// .cpp
Whatever::SomeMethod()
{
...
boostSignalConnections_.push_back(
anObject->AddEventOccurredObserver(
std::bind(&Whatever::OnEventOccurred,
this, std::placeholders::_1)));
...
}
AddEventOccurredObserver
(に委任しboost::signals2::connect()
て返すことに注意してくださいboost::signals2::connection
)
次のエラーが表示されます。テンプレートのエラーを解釈するのは難しいですが、エラーはのメンバー宣言で発生しているようですstd::vector<boost::signals2::scoped_connection> boostSignalConnections_;
...\vc\include\xmemory(202): error C2248:
'boost::signals2::scoped_connection::scoped_connection' :
cannot access private member declared in class 'boost::signals2::scoped_connection'
...\boost_1_47\boost\signals2\connection.hpp(234) : see declaration of
'boost::signals2::scoped_connection::scoped_connection'
...\boost_1_47\boost\signals2\connection.hpp(210) :
see declaration of 'boost::signals2::scoped_connection'
...\vc\include\xmemory(201) : while compiling class template member function
'void std::allocator<_Ty>::construct(boost::signals2::scoped_connection *,_Ty &&)'
with
[
_Ty=boost::signals2::scoped_connection
]
検索しましたが、scoped_connection がコピーできないことに関係していると思いますか? わからない。私が scoped_connection を使用している理由は、この SO の質問のためです: 多くの信号/スロットの接続/切断を boost:: signals2 で処理する
アップデート
参考までに、 から に変更scoped_connection
するconnection
と動作します: std::vector<boost::signals2::connection> boostSignalConnections_;
. 使用する私の全体的な理由scoped_connection
は、それらが破壊時に自動的に接続を切断することですが、私はそうでconnection
はないと信じています。ただし、コレクションを繰り返し処理して、それぞれを手動で切断することはできます。