Friend 演算子関数を使用して C テンプレートで暗黙的な型変換を有効にするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-17 04:29:03
オリジナル
552 人が閲覧しました

How Can Friend Operator Functions Enable Implicit Type Conversions in C   Templates?

フレンド演算子関数を使用したテンプレートでの暗黙的な型変換

テンプレートで暗黙的な型変換を利用するために、頻繁に使用される手法は、テンプレート クラスの定義内の非メンバー フレンド関数。

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート