我正在为以下界面编写一个模拟:
virtual void store(const Foo& container) = 0;
因此,在实现中,我希望将每次发送的内容保存在向量中,如下所示:
virtual void store(const Foo& container)
{
_storedContainers.push_back(container);
}
_storedContainers 应该有什么类型,_storedContainers 是 mock 的成员?
如果你想存储一个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
有可能成为悬空引用。http://codepad.org/VookOm6istore()
上的在线演示。
cref()
示例(使用和的等效 c++11 版本reference_wrapper
)http://ideone.com/0vVv8w。
该表达式container
具有 type const Foo
,因此您试图将一个Foo
对象推入_storedContainers
. 这意味着_storedContainers
可能应该是Foo
s 的容器,例如std::vector<Foo>
.