C++ 谷歌模拟-私有转换操作符int

C++ 谷歌模拟-私有转换操作符int,c++,unit-testing,googletest,googlemock,gmock,C++,Unit Testing,Googletest,Googlemock,Gmock,我正在使用基于以下示例的类似代码: class FOO { private: operator int() const; }; class BARMOCK { public: MOCK_METHOD1(Bar, void(const FOO& foo)); }; 很遗憾,编译器生成了以下错误消息: gtest/internal/gtest-internal.h(892): error C2248: 'FOO::operator int': cannot access

我正在使用基于以下示例的类似代码:

class FOO
{
private:
    operator int() const;
};

class BARMOCK
{
public:
    MOCK_METHOD1(Bar, void(const FOO& foo));
};
很遗憾,编译器生成了以下错误消息:

gtest/internal/gtest-internal.h(892): error C2248: 'FOO::operator int': cannot access private member declared in class 'FOO'
来自gtest内部测试本身:

static const bool value = sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1;
是否有任何可能的方法使其工作,或者这是已知的谷歌模拟框架的限制

当然,有一些方法可以解决这个问题,比如:

class BARMOCK
{
public:
    MOCK_METHOD1(BarMock, void());
    void Bar(const FOO& foo) { BarMock(); }
};

但这只是一个变通办法,不是真正的解决办法。有人知道这件事吗?谢谢。

问题是googlemock想要打印您的FOO值。它的行为符合此算法:

  • 如果已定义函数
    PrintTo(FOO const&,std::ostream*)
    ,则使用该函数

  • 否则,如果可以通过经典C++方式打印(使用<代码>运算符> P>,问题是GoGoMeLokes想要打印您的FoO值,并且按照该算法执行:

  • 如果已定义函数
    PrintTo(FOO const&,std::ostream*)
    ,则使用该函数
  • 否则,如果可以通过经典C++方式打印(使用<代码>操作符)
    class FOO {
      friend std::ostream& operator << (std::ostream& os, const FOO& foo)
      {
          return os << static_cast<int>(foo);
      }