在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
应该被删除。