プログラム内のクラスをテストするために CPPUnit を使用しています。このクラス ( SCriterionVal
) は、多くの型の変換演算子を持っているため、ややユニークです (これは本質的に動的型値クラスです)。を使用してテストするテスト ケースをコンパイルすると、CPPUnit ヘッダー ファイルの 1 つから「あいまいです」CPPUNIT_ASSERT_EQUAL()
というコンパイル エラーが発生します。私の型で構造体をoperator<<
インスタンス化しているようで、その構造体には を使用して動作するメソッドがあります。assertion_traits
toString()
operator<<
OStringStream
SCriterionVal
で利用可能なさまざまな変換があり、その一部が定義さoperator<<
れているため (組み込み型など) 、エラーではなくあいまいであると思います。SCriterionVal
この状況を修正するために、次のシグネチャを使用してヘッダーに非メンバー関数を作成しました。
ostream &operator<<(ostream &stream, SCriterionVal val);
署名は完全に一致する必要があるため、あいまいさが解決されると考えました。そのような幸運はありません。ここで何が間違っていますか?テンプレートを自分のタイプに特化できると思いますがassertion_traits
、テスト フレームワークに対応するだけでなく、自分のクラスをストリームに入れる方法を提供するという、より一般的な問題を解決できることを望んでいました。