2013-05-22 1 views
1

나는 다음과 같은 인터페이스에 대한 모의 쓰고 있어요에 : 나는 벡터의 각 시간에 전송 뭐죠 저장하려는 구현에 따라서추가 푸 & A 표준 : : 벡터

virtual void store(const Foo& container) = 0; 

를, 이런 식으로 뭔가 : _storedContainers 있어야하는 어떤 종류의

virtual void store(const Foo& container) 
{ 
    _storedContainers.push_back(container); 
} 

, _storedContainers는 모의의 멤버?

답변

4

다음 일반 참조를 할당 할 수없는이며 vector에 저장되지 수 boost::cref()boost::reference_wrapper를 사용 store()에 전달 된 객체가 여전히 필요하지만 파괴 된 경우 매달려있는 참조가됩니다. 온라인 데모는 http://codepad.org/VOokOm6i입니다.

예 ( cref() 및 의 동등한 C++ 11 버전 사용) http://ideone.com/0vVv8w.

+0

내 질문에 C++ 98이 표시됩니다. 나는 부스트를 사용하고있다. – Baz

+1

@Baz, 부스트를 사용하도록 온라인 데모를 업데이트했습니다. – hmjd

2

container 표현식은 const Foo이므로 Foo 개체를 _storedContainers으로 푸시하려고합니다. 즉, _storedContainersstd::vector<Foo>과 같이 Foo의 컨테이너 여야합니다.

std::vector<boost::reference_wrapper<const Foo> > _storedContainers; 

virtual void store(const Foo& container) 
{ 
    _storedContainers.push_back(boost::cref(container)); 
} 

그러나, _storedContainers의 요소는 잠재력을 가지고 : 당신이 Fooconst 참조를 저장하려면