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));
}