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가 복사 가능한 없다는 함께해야 할 것 같아요? 나는 잘 모르겠다. 나는 scoped_connection를 사용하고 있는데 그 이유는이 때문에 SO 질문입니다 : Handle connection/disconnection of many signals/slots with boost::signals2
업데이트 참고
, 내가 scoped_connection
작동 connection
까지 변경할 때 : std::vector<boost::signals2::connection> boostSignalConnections_;
. scoped_connection
을 사용하는 나의 모든 이유는 그들이 자동으로 연결을 해제한다는 것입니다. 반면 connection
은 그렇지 않습니다. 그러나 컬렉션을 반복하고 각 컬렉션을 수동으로 분리 할 수 있습니다.
문제는 복사 생성자가 비공개라는 것이 맞습니다. 'vector'는 (예를 들어 확장 때문에) 재 할당의 경우 요소를 복사해야하기 때문에 이것은 문제입니다. 나는 당신을 위해 최선의 해결책을 가지고 있지 못하다. 그래서 나는 그것을 "다른 무엇을해야 하는가?"라는 함축적 인 질문에 실제로 대답하기 위해 남겨 둘 것이다. 나의 첫 번째, 순진한 응답은 힙 할당 된 연결에 대한 포인터/참조 벡터를 유지하는 것이지만 분명히 방정식의 '범위'부분의 유용성을 거의 제거합니다. – tmpearce