我正在使用CPPUnit在我的程序中测试一个类。这个类(SCriterionVal
)有点独特,因为它有许多类型的转换运算符(它本质上是一个动态类型值类)。当我编译使用CPPUNIT_ASSERT_EQUAL()
进行测试的测试用例时,我从其中一个CPPUnit头文件中收到关于“operator<<
不明确”的编译错误。看来它正在用我的类型实例化assertion_traits
结构,并且该结构有一个toString()
方法,该方法在OStringStream
上使用operator<<
工作。超载运算符<<用于ostream
由于SCriterionVal
可用的各种转换(其中一些定义了operator<<
(如内置类型)),我们假设它是模糊的而不是错误。在试图改变这种状况,我创造了一个头非成员函数SCriterionVal
与此签名:
ostream &operator<<(ostream &stream, SCriterionVal val);
我想通因为签名应该是完全匹配的,它会解决歧义。没有这样的运气。我在这里做错了什么?我想我可以专门为我的类型设计assertion_traits
的模板,但我希望能够解决更普遍的问题,即提供一种方法将我的类放入流中,而不仅仅是迎合测试框架。
英文描述是SOOO比代码好得多的另一种情况。 – 2009-09-22 18:48:45
我想我们应该创建另一个标签EBTC(英文是更好然后代码) – 2009-09-22 18:50:04
马丁,我认为你的意见是讽刺。我无法发布代码,因为这违反了我公司的政策。此外,它是一个非常大的类,并使用数十种自定义类型,因此无论如何您都无法编译它。 – rmeador 2009-09-22 19:01:55