2013-05-22 35 views
1

我写了下面的界面模拟:添加美孚和为std :: vector的

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

所以我要保存什么,每次在一个向量发送的实施,是这样的:

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

应该_storedContainers有哪些类型,其中_storedContainers是模拟的一员?

回答

4

如果你想存储const参考Foo然后使用boost::cref()boost::reference_wrapper纯引用是不可转让的,不能存放在vector

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

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

然而,在_storedContainers元素有潜力如果传递到store()的对象在仍然需要时被破坏,则成为悬挂引用。在线演示http://codepad.org/VOokOm6i

示例(使用 cref()reference_wrapper的等效C++ 11版本) http://ideone.com/0vVv8w

+0

我的问题是标记为C++ 98。我正在使用boost。 – Baz

+1

@Baz,更新在线演示使用提升。 – hmjd

2

表达式container的类型为const Foo,因此您试图将Foo对象转换为_storedContainers。这意味着_storedContainers应该可能是Foo的容器,例如std::vector<Foo>