我正在为以下界面编写一个模拟器:
virtual void store(const Foo& container) = 0;
所以在实现中我希望保存每次在向量中发送的内容,如下所示:
virtual void store(const Foo& container)
{
_storedContainers.push_back(container);
}
_storedContainers应该具有哪种类型,其中_storedContainers是模拟的成员?
答案 0 :(得分: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。
答案 1 :(得分:2)
表达式container
的类型为const Foo
,因此您尝试将Foo
对象推送到_storedContainers
。这意味着_storedContainers
应该是Foo
的容器,例如std::vector<Foo>
。