「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ は関数の戻り値の型からテンプレートの型を推定できますか?

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

2024 年 11 月 10 日に公開
ブラウズ:858

Can C   Deduce Template Types from Function Return Types?

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

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

GCPtr ptr1 = GC::Allocate();
GCPtr ptr2 = GC::Allocate();

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

class GC
{
public:
    template
    static GCPtr Allocate();
};

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

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

template 
void Allocate(GCPtr& p) {
    p = GC::Allocate();
}

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

GCPtr p;
Allocate(p);

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

注: C 11 では、1 つを省略できます。 auto キーワードを使用した型宣言:

auto p = GC::Allocate(); // p is of type GCPtr
型です
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3