1

C++03 标准中的模板章节开头如下:

模板定义了一系列类或函数。

模板声明:  
     导出opt模板 <模板参数列表> 声明
模板参数列表:
     模板参数
     模板参数列表,模板参数

模板声明中的声明应

— 声明或定义一个函数或一个类,或

— 定义类模板或嵌套在类模板中的类 的成员函数、成员类或静态数据成员,或

— 定义一个类或类模板的成员模板。

模板声明是一个声明。如果模板声明定义了一个函数、一个类或一个静态数据成员,那么它也是一个定义。

因此,根据我阅读粗体文本的理解,除了class -templatefunction-template之外,我们还可以定义静态 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

ifA是一个类模板,如下所示

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 回答