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)));
...
}
(注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的原因是因爲這個太問題: Handle connection/disconnection of many signals/slots with boost::signals2
更新
僅供參考,當我從scoped_connection
到connection
它的工作原理改變:std::vector<boost::signals2::connection> boostSignalConnections_;
。我使用scoped_connection
的全部理由是,它們會自動斷開破壞連接,但我相信connection
不會。但是,我可以遍歷集合並手動斷開每個集合。
你是對的,問題是複製構造函數是私人的。由於'vector'需要在重新分配的情況下複製元素(例如由於擴展),所以這是一個問題。儘管我沒有最好的解決方案,所以我會把它留給其他人來回答隱含的問題:「我該怎麼做?」我的第一個天真的迴應是保持指向堆分配連接的指針/引用向量,但這顯然幾乎消除了等式的scoped部分的用處。 – tmpearce