在C ++中使用模板variables结构

我正在玩模板。 我不想重新发明std :: vector,我试图去掌握C ++中的模板。

我可以做以下吗?

template <typename T> typedef struct{ size_t x; T *ary; }array; 

我想要做的是一个基本的模板版本:

 typedef struct{ size_t x; int *ary; }iArray; 

它看起来像是在工作,如果我使用类而不是结构,所以这是不可能的typedef结构?

问题是你不能模板一个typedef,也没有必要在C ++中键入结构。

以下将做你所需要的

 template <typename T> struct array { size_t x; T *ary; }; 
 template <typename T> struct array { size_t x; T *ary; }; 

你不需要为类和结构做一个明确的typedef 。 你需要什么typedef的? 此外, template<...>之后的typedef在语法上是错误的。 只需使用:

 template <class T> struct array { size_t x; T *ary; } ; 

你可以模板一个结构以及一个类。 但是你不能模板一个typedef。 所以template<typename T> struct array {...}; 工作,但template<typename T> typedef struct {...} array; 才不是。 请注意,在C ++中不需要typedef技巧(你可以在C ++中使用没有struct修饰符的struct )。

“标准”(14/3)对于非标准人员,类定义主体(或者一般声明中的types)后的名称是“声明者”)

在模板声明,显式特化或显式实例化的过程中,声明中的init-declarator-list最多只能包含一个声明。 当这样的声明被用来声明一个类模板时,不允许声明符。

像安德烈所performance的那样。

从其他的答案,问题是,你是模板typedef。 这样做的唯一“途径”是使用模板类; 即基本模板元编程。

 template<class T> class vector_Typedefs { /*typedef*/ struct array { //The typedef isn't necessary size_t x; T *ary; }; //Any other templated typedefs you need. Think of the templated class like something // between a function and namespace. } //An advantage is: template<> class vector_Typedefs<bool> { struct array { //Special behavior for the binary array } } 

语法是错误的。 typedef应该被删除。