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: error: no match for 'operator<<' in '((const boost::detail::variant::printer > >*)this)-> boost::detail::variant::printer > >::out_ <<operand'</p>

boost::variant 是否与 std::vector 一起使用?似乎 boost::variant 适用于我定义的任何类型,但 std:vector 除外。为什么?

升压版 - 1.45 g++ 版 - 4.4.5

4

2 回答 2

3

似乎模拟尝试将运算符 << 应用于您的变体。您必须为其内容定义运算符 <<,即 std::vector 模板。

于 2012-05-31T10:31:08.370 回答
1

正如 Igor R. 回答的那样,您需要像这样添加运算符 << (没有命名空间):

std::ostream& operator <<(std::ostream& out, VariantOfVector const& rhs)
{
    //Print or apply your visitor to **rhs**
    return out;
}
于 2014-09-28T10:14:32.947 回答