class Whatever
{
public:
virtual ~Whatever();
protected:
Whatever();
virtual void SomeMethod();
void OnEventOccurred(int x);
std::vector<boost::signals2::scoped_connection> boostSignalConnections_;
}
// .cppファイルエラー: "クラス 'boost :: signals2 :: scoped_connection'で宣言されたプライベートメンバーにアクセスできません"
Whatever::SomeMethod()
{
...
boostSignalConnections_.push_back(
anObject->AddEventOccurredObserver(
std::bind(&Whatever::OnEventOccurred,
this, std::placeholders::_1)));
...
}
(boost::signals2::connect()
にAddEventOccurredObserver
ちょうどデリゲートを注意して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がコピー可能でないとしなければならないかもしれないと思いますか?よく分かりません。 Handle connection/disconnection of many signals/slots with boost::signals2
更新
ちなみに、私はscoped_connection
からconnection
に変更した場合、それは動作します:std::vector<boost::signals2::connection> boostSignalConnections_;
を私はscoped_connectionを使用している理由は、このSO疑問です。 scoped_connection
を使用している私の主な理由は、彼らが自動的に切断時に接続を切断するということです。私はconnection
がそうでないと信じています。しかし、私はコレクションを繰り返して、手動でそれぞれを切断することができます。
問題は、コピーコンストラクタがプライベートであるということは間違いありません。 'ベクトル 'は(例えば拡張のために)再割り当ての場合に要素をコピーする必要があるので、これは問題です。私はあなたのために最善の解決策を持っていないので、私は実際に "代わりに何をすべきか"という暗黙の質問に答えるために他の人に任せます。私の最初の、素朴な応答は、ヒープ割り当てされた接続へのポインタ/参照のベクトルを保持することですが、明らかに、式のスコープ部分の有用性はほとんどありません。 – tmpearce