フレンド演算子関数を使用したテンプレートでの暗黙的な型変換
テンプレートで暗黙的な型変換を利用するために、頻繁に使用される手法は、テンプレート クラスの定義内の非メンバー フレンド関数。
C では、テンプレート関数は、特定の型で呼び出されるまでインスタンス化されません。オーバーロードの解決中に、コンパイラーはテンプレート パラメーターの型を推測し、暗黙的な変換を除いて、引数の型と正確に一致しないテンプレートをすべて削除します。
解決策は、テンプレート内で定義されたフレンド演算子関数を利用することです。クラス定義。テンプレートのインスタンス化ごとに、コンパイラは、置換された型に一致するシグネチャを持つ無料の非テンプレート関数を生成します。
たとえば、次のことを考慮してください。
template <typename T> class test { friend test operator+(test const &, test const &) { return test(); } };
テンプレートが int でインスタンス化される場合、コンパイラは非テンプレート関数を作成します:
test<int> operator+(test<int> const &, test<int> const &) { return test<int>(); }
この関数は、引数に依存した検索を通じて使用でき、引数に対して暗黙的な変換を実行します。これは、テンプレート クラスの外部で定義されており、オーバーロードの解決中に型の正確な一致を必要としないためです。
したがって、型 test
A<3> a(4); A<3> b = a + 5; A<3> c = 5 + a;以上がFriend 演算子関数を使用して C テンプレートで暗黙的な型変換を有効にするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。