4

boost::variant を使用するインターフェイス クラスの Google Mock オブジェクトを作成しようとしています。

#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <boost/variant.hpp>
#include <vector>

typedef std::vector<int> VectorOfInt;
typedef boost::variant<VectorOfInt> VariantOfVector;

class InterfaceClass
{
public:
     virtual ~InterfaceClass() {}
     virtual void SetSome( const VariantOfVector& ) = 0;
     virtual const VariantOfVector& GetSome() const = 0;
};

class MockInterfaceClass
{
public:
     MOCK_METHOD1( SetSome, void( const VariantOfVector& ) );
     MOCK_CONST_METHOD0( GetSome, const VariantOfVector&() );
};

でコンパイルすると

g++ mytest.cpp -o mytest

私は得る

/usr/include/boost/variant/detail/variant_io.hpp:64: エラー: '((const boost::detail::variant::printer > >*)this)-> の 'operator<<' に一致しませんboost::detail::variant::printer > >::out_ <<オペランド'</p>

boost::variant は std::vector で動作しますか? boost::variant は、std:vector 以外の任意の型で動作するようです。なんで?

Boost バージョン - 1.45 g++ バージョン - 4.4.5

4

2 に答える 2

3

モックは演算子<<をバリアントに適用しようとしているようです。その内容、つまりstd::vectorテンプレートに対して演算子<<を定義する必要があります。

于 2012-05-31T10:31:08.370 に答える