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