ホームページ >バックエンド開発 >C++ >ユーザー定義型の暗黙的な型変換でテンプレート推定が失敗するのはなぜですか?

ユーザー定義型の暗黙的な型変換でテンプレート推定が失敗するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-28 14:28:301043ブラウズ

Why Does Template Deduction Fail with Implicit Type Conversion for User-Defined Types?

暗黙的な型変換とテンプレート推定

int を Scalar に暗黙的に変換しようとする場合。テンプレート関数呼び出し内のオブジェクトを使用すると、テンプレート引数の推論が失敗する可能性があります。これは、テンプレート引数の推論では、int と Scalar 間の変換など、ユーザー定義の変換が自動的に考慮されないために発生します。

提供されたコードでは、

<code class="cpp">func(a, 2);</code>

コンパイラは int 2 を Scalar に暗黙的に変換しようとします。オブジェクトですが、ユーザー定義の変換が考慮されていないため、テンプレート引数の推論は失敗します。これを解決するには、呼び出し元サイトで引数を明示的に変換する必要があります:

<code class="cpp">func(a, Scalar<int>{2}); // C++14</code>

または、C 17 が使用されている場合は、Scalar の演繹ガイドを定義して、次の構文を許可できます:

<code class="cpp">func(a, Scalar{2});</code>

最後に、指定された型引数を使用したテンプレート関数の明示的なインスタンス化により、暗黙的な変換の必要性を回避することもできます。

<code class="cpp">func<int>(a, 2); // Assuming Scalar<T>::Scalar(T) is not explicit</code>

以上がユーザー定義型の暗黙的な型変換でテンプレート推定が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。