1

C++03 標準のテンプレートの章は、次のように始まります。

テンプレートは、クラスまたは関数のファミリを定義します。

テンプレート宣言:  
     export opt template < template-parameter-list > 宣言
テンプレート パラメータ リスト:
     テンプレート パラメータ
     テンプレート パラメータ リスト、テンプレート パラメータ

テンプレート宣言宣言は 、

— 関数またはクラスを宣言または定義する、または

—クラステンプレートまたはクラステンプレート内にネストされたクラス のメンバー関数、メンバークラス、または静的データメンバーを定義する、または

— クラスまたはクラス テンプレートのメンバー テンプレートを定義します。

テンプレート宣言宣言です。宣言が関数、クラス、または静的データ メンバーを定義する場合、テンプレート宣言定義です。

したがって、太字のテキストを読んで理解していることは、 class -templatefunction-templateに加えて、static data-member-templateを定義できるということです。しかし、私はstatic data-member-template を見たことがありません。それはどのように正確に定義されていますか?次のことを試しましたが、GCC はそれを受け入れません ( ideone ):

template<typename T> struct X{};

template<typename T>
struct A
{
   template<typename U> static X<U> data_member;
};

それで、引用を正しく理解しているかどうか、自分自身を疑うようになりました。私は正確に何が欠けていますか?または、静的データ メンバー テンプレートをどのように正確に定義できますか? 太字のテキストはどういう意味ですか?

4

2 に答える 2

5

いいえ、次のことを指します。

template<typename T> int A<T>::staticDataMember;
//                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~ declaration

A次のようなクラス テンプレートの場合

template<typename T>
struct A { static int staticDataMember; };
于 2011-05-28T13:24:41.910 に答える
0

data_member実際の型を与えたことはありません。

template<typename T> struct X{};

template<typename T>
struct A
{
   static X<T> data_member;
};
于 2011-05-28T13:23:29.610 に答える