1

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

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

因此,在实现中,我希望将每次发送的内容保存在向量中,如下所示:

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

_storedContainers 应该有什么类型,_storedContainers 是 mock 的成员?

4

2 回答 2

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有可能成为悬空引用。http://codepad.org/VookOm6istore()上的在线演示。

cref()示例(使用和的等效 c++11 版本reference_wrapperhttp://ideone.com/0vVv8w

于 2013-05-22T14:30:57.610 回答
2

该表达式container具有 type const Foo,因此您试图将一个Foo对象推入_storedContainers. 这意味着_storedContainers可能应该是Foos 的容器,例如std::vector<Foo>.

于 2013-05-22T14:22:13.110 回答