我正在使用 CPPUnit 在我的程序中测试一个类。这个类 ( SCriterionVal) 有点独特,因为它具有许多类型的转换运算符(它本质上是一个动态类型值类)。当我编译使用 测试它的测试用例时,我从 CPPUnit 头文件之一中CPPUNIT_ASSERT_EQUAL()得到关于“不明确”的编译错误。operator<<似乎它正在assertion_traits用我的类型实例化结构,并且该结构有一个toString()方法可以通过operator<<在OStringStream.
我认为这是模棱两可而不是错误,因为 上可用的各种转换SCriterionVal,其中一些已经定义operator<<(例如内置类型)。为了纠正这种情况,我在标头中创建了一个SCriterionVal具有此签名的非成员函数:
ostream &operator<<(ostream &stream, SCriterionVal val);
我想因为签名应该是完全匹配的,它会解决歧义。没有这样的运气。我在这里做错了什么?我想我可以为我的类型专门化模板assertion_traits,但我希望能够解决更普遍的问题,即提供一种将我的类放入流中的方法,而不仅仅是迎合测试框架。