Arrays Gtest std::自定义类型的数组匹配器

Arrays Gtest std::自定义类型的数组匹配器,arrays,c++11,googletest,matcher,Arrays,C++11,Googletest,Matcher,我是工会会员 使用我的联合=联合我的联合{ 结构{ int-var1; int-var2; }; 长的 var; 布尔运算符==(常量my_union和oth){ 返回var==oth.var; } }; 使用my_union_1d=std::array; 使用my_union_2d=std::array; 我有一些函数可以接受这个数组 类测试{ 公众: void Foo(我的工会2d&arg1); }; 现在我需要检查Mocked Foo是否使用预期参数调用 类TestMock:公共测试{

我是工会会员

使用我的联合=联合我的联合{
结构{
int-var1;
int-var2;
};
长的
var;
布尔运算符==(常量my_union和oth){
返回var==oth.var;
}
};
使用my_union_1d=std::array;
使用my_union_2d=std::array
我有一些函数可以接受这个数组

类测试{
公众:
void Foo(我的工会2d&arg1);
};
现在我需要检查Mocked Foo是否使用预期参数调用

类TestMock:公共测试{
公共:模拟方法(无效,Foo,(my_union_2d&);
};

但是,由于找不到array==运算符的数组,代码不会编译。我试着改变AllOfArray,但我似乎在GTest的文档中迷失了方向。有人知道需要做什么或参考点吗?

适当的
运算符==
作为成员函数的方法应为
常量
方法:

bool operator==(const my_union &oth) const { return var == oth.var;}

经过一些调查,我终于解决了编译问题

MATCHER_P(MyMatch, oth, "Arg is not the same")
{
    for (uint8_t outer=0; outer <3; outer++)
    {
        for (uint8_t inner = 0; inner < 2; inner++)
        {
            if ((arg[inner].var1 != oth[inner].var1) ||
                (arg[inner].var2 != oth[inner].var2))
                return 0;
        }
    }
    return 1;
}

我收回我先前的回答。我将==运算符重载为非常量方法,一旦我改为“const”,它就会像@Quarra建议的那样工作
MATCHER_P(MyMatch, oth, "Arg is not the same")
{
    for (uint8_t outer=0; outer <3; outer++)
    {
        for (uint8_t inner = 0; inner < 2; inner++)
        {
            if ((arg[inner].var1 != oth[inner].var1) ||
                (arg[inner].var2 != oth[inner].var2))
                return 0;
        }
    }
    return 1;
}
EXPECT_CALL( * (TestMock * ) obj, Foo(MyMatch(expected_args))).Times(1);