我正在玩模板。我不是要重新发明std :: vector,我试图掌握C ++中的模板。
我可以执行以下操作吗?
template <typename T>
typedef struct{
size_t x;
T *ary;
}array;
我要做的是基本的模板化版本:
typedef struct{
size_t x;
int *ary;
}iArray;
如果我使用类而不是struct,它看起来有效,那么typedef结构是不可能的呢?
答案 0 :(得分:128)
问题是你不能模板化typedef,也不需要在C ++中输入typedef结构。
以下将满足您的需求
template <typename T>
struct array {
size_t x;
T *ary;
};
答案 1 :(得分:18)
template <typename T>
struct array {
size_t x;
T *ary;
};
答案 2 :(得分:9)
您不需要为类和结构做明确的typedef
。您需要typedef
为什么?此外,typedef
之后的template<...>
在语法上是错误的。只需使用:
template <class T>
struct array {
size_t x;
T *ary;
} ;
答案 3 :(得分:5)
您可以模拟结构和类。但是,您无法模板化typedef。因此template<typename T> struct array {...};
有效,但template<typename T> typedef struct {...} array;
没有。请注意,C ++中不需要typedef技巧(在C ++中可以使用没有struct
修饰符的结构)。
答案 4 :(得分:4)
标准说(14/3。对于非标准人员,类定义主体后面的名称(或一般声明中的类型)是“声明者”)
在模板声明,显式特化或显式实例化中,声明中的init-declarator-list最多应包含一个声明符。当这样的声明用于声明类模板时,不允许声明者。
像安德烈秀那样。
答案 5 :(得分:3)
语法错误。应删除typedef
。
答案 6 :(得分:3)
从其他答案来看,问题是你正在模仿一个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
}
}
答案 7 :(得分:0)
看起来像@monkeyking正在尝试使其变得更明显,如下所示
template <typename T>
struct Array {
size_t x;
T *ary;
};
typedef Array<int> iArray;
typedef Array<float> fArray;