1

次のインターフェースのモックを書いています。

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

したがって、実装では、毎回送信されたものを次のようなベクトルに保存したいと考えています。

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

_storedContainers が持つべき型は何ですか? _storedContainers はモックのメンバーですか?

4

2 に答える 2

4

constへの参照を保存したい場合は、プレーンな参照としてandをFoo使用します。boost::cref()boost::reference_wrappervector

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()でのオンライン デモ。

例 ( と の同等の c++11 バージョンをcref()使用reference_wrapper) http://ideone.com/0vVv8w .

于 2013-05-22T14:30:57.610 に答える
2

式のcontainerタイプは であるため、オブジェクトをconst Fooにプッシュしようとしています。つまり、おそらくなどの のコンテナーである必要があります。Foo_storedContainers_storedContainersFoostd::vector<Foo>

于 2013-05-22T14:22:13.110 に答える