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*)
,则使用该函数class FOO {
friend std::ostream& operator << (std::ostream& os, const FOO& foo)
{
return os << static_cast<int>(foo);
}