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