我正在使用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