ホームページ > バックエンド開発 > C++ > C は関数の戻り値の型からテンプレートの型を推測できますか?

C は関数の戻り値の型からテンプレートの型を推測できますか?

Mary-Kate Olsen
リリース: 2024-11-06 12:23:02
オリジナル
367 人が閲覧しました

Can C   Deduce Template Types from Function Return Types?

C での関数の戻り値の型に基づくテンプレートの推論

C では、ジェネリックをインスタンス化するコードを簡素化するためにテンプレートの推論を利用することが望ましい場合があります。関数の引数のデータ型に基づいて関数を決定します。次の例を考えてみましょう:

<code class="cpp">GCPtr<A> ptr1 = GC::Allocate();
GCPtr<B> ptr2 = GC::Allocate();</code>
ログイン後にコピー

ジェネリック型パラメーターを明示的に指定する代わりに、GC::Allocate() 関数の戻り値の型を使用してこの推定を達成することが目標です。ただし、C では戻り値の型に基づく型推定は許可されていません。

<code class="cpp">class GC
{
public:
    template<typename T>
    static GCPtr<T> Allocate();
};</code>
ログイン後にコピー

戻り値の型がジェネリックであるにもかかわらず、コンパイラはテンプレートの型パラメータ を明示的に指定する必要があります。 GC::Allocate() 関数をインスタンス化するとき。

この制限を軽減するには、補助関数を導入できます。

<code class="cpp">template <typename T>
void Allocate(GCPtr<T>& p) {
    p = GC::Allocate<T>();
}</code>
ログイン後にコピー

この関数を使用すると、次のように元の目的を達成できます。 :

<code class="cpp">GCPtr<A> p;
Allocate(p);</code>
ログイン後にコピー

この構文が明示的な型指定よりも大きな利点があるかどうかは主観的です。

注: C 11 では、次のいずれかを省略できます。 auto キーワードを使用した型宣言:

<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
ログイン後にコピー

以上がC は関数の戻り値の型からテンプレートの型を推測できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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