C++ 将Foo&添加到std::vector

C++ 将Foo&添加到std::vector,c++,c++98,C++,C++98,我正在为以下界面编写一个模拟: virtual void store(const Foo& container) = 0; 因此,在实现中,我希望将每次发送的内容保存在一个向量中,如下所示: virtual void store(const Foo& container) { _storedContainers.push_back(container); } storedContainers应该有什么类型,其中storedContainers是mock的成员?表达式容

我正在为以下界面编写一个模拟:

virtual void store(const Foo& container) = 0;
因此,在实现中,我希望将每次发送的内容保存在一个向量中,如下所示:

virtual void store(const Foo& container)
{
    _storedContainers.push_back(container);
}
storedContainers应该有什么类型,其中storedContainers是mock的成员?

表达式容器的类型为const Foo,因此您试图将Foo对象推送到storedContainers中。这意味着_storedContainers可能应该是Foo的容器,例如std::vector。

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

如果您想存储对Foo的常量引用,那么使用和boost::reference包装,因为普通引用是不可分配的,并且不能存储在vector中:

但是,如果传递到store的对象在仍然需要时被销毁,则_storedContainers中的元素有可能成为悬挂引用。在线演示在

使用等效c++11版本的cref和reference_包装的示例。

如果要存储对Foo的常量引用,请使用和boost::reference_包装,因为普通引用是不可分配的,不能存储在向量中:

但是,如果传递到store的对象在仍然需要时被销毁,则_storedContainers中的元素有可能成为悬挂引用。在线演示在

使用等效c++11版本的cref和reference_包装器的示例

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

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