5

stl_construct.h でいくつかのソース コードを読んでいます。ほとんどの場合、<> に sth があり、" template<> ..." だけの行がいくつかあります。これは何ですか?

4

3 に答える 3

10

これは、以下がテンプレートの特殊化であることを意味します。

于 2012-05-21T09:13:48.020 に答える
2

Q を完全に読み違えて、質問されていないことを答えたと思います。
だからここで私は尋ねられたQに答えます:

これは、空のテンプレート引数リストを持つ明示的な特殊化です。

テンプレート引数の特定のセットを使用してテンプレートをインスタンス化すると、コンパイラはそれらのテンプレート引数に基づいて新しい定義を生成します。しかし、定義生成のこの動作をオーバーライドする機能があります。コンパイラが定義を生成する代わりに、指定されたテンプレート引数のセットに対してコンパイラが使用する定義を指定できます。これは、明示的な特殊化と呼ばれます。

プレフィックスは、次のtemplate<>テンプレート宣言がテンプレート パラメーターを取らないことを示します。

明示的な特殊化は、次のものに適用できます。

  • 関数またはクラス テンプレート
  • クラス テンプレートのメンバー関数
  • クラス テンプレートの静的データ メンバー
  • クラス テンプレートのメンバー クラス
  • クラステンプレートのメンバ関数テンプレート &
  • クラス テンプレートのメンバ クラス テンプレート
于 2012-05-21T09:18:08.637 に答える
0

これは、すべてのテンプレート パラメーターが完全に指定されているテンプレートの特殊化であり、<>.

例えば:

template<class A, class B>   // base template
struct Something
{ 
    // do something here
};

template<class A>            // specialize for B = int
struct Something<A, int>
{ 
    // do something different here
};

template<>                   // specialize both parameters
struct Something<double, int>
{ 
    // do something here too
};
于 2012-05-21T09:31:27.153 に答える