C++ 在C++;
我在玩弄模板。我不想重新创建STD::vector,我试图掌握C++中的模板化。 我能做以下事情吗C++ 在C++;,c++,class,templates,struct,C++,Class,Templates,Struct,我在玩弄模板。我不想重新创建STD::vector,我试图掌握C++中的模板化。 我能做以下事情吗 template <typename T> typedef struct{ size_t x; T *ary; }array; 如果我使用一个类而不是结构,它看起来是有效的,那么使用typedef结构是不可能的吗?模板 template <typename T> struct array { size_t x; T *ary; }; 结构数组{ 尺寸x;
template <typename T>
typedef struct{
size_t x;
T *ary;
}array;
如果我使用一个类而不是结构,它看起来是有效的,那么使用typedef结构是不可能的吗?模板
template <typename T>
struct array {
size_t x;
T *ary;
};
结构数组{
尺寸x;
三元;
};
您不需要为类和结构执行显式的typedef
。您需要typedef
做什么?此外,模板之后的typedef
在语法上是错误的。只需使用:
template <class T>
struct array {
size_t x;
T *ary;
} ;
模板
结构数组{
尺寸x;
三元;
} ;
<>代码> 问题是你不能模板Type,也不需要C++中的TyPulf结构。
以下内容将满足您的需要
template <typename T>
struct array {
size_t x;
T *ary;
};
模板
结构数组{
尺寸x;
三元;
};
您可以为结构和类设置模板。但是,您不能为typedef设置模板。所以模板结构数组{…}代码>工作,但模板typedef struct{…}数组代码>没有。注意C++中不需要TyPulf技巧(您可以使用没有<代码>结构> <代码> >修改器的C++结构。 < P>标准(14/3)。对于非标准成员,类定义体(或一般声明中的类型)的名称是“声明器”
在模板声明、显式专门化或显式实例化中,声明中的init声明器列表最多应包含一个声明器。当这样的声明用于声明类模板时,不允许使用声明器
像安德烈表演的那样 语法错误。应该删除typedef
。从其他答案中,问题是您正在模板化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
}
}
模板类向量\u Typedefs{
/*typedef*/struct数组{//typedef不是必需的
尺寸x;
三元;
};
//您需要的任何其他模板化typedef。将模板化类想象成
//在函数和命名空间之间。
}
//优点是:
模板类向量_Typedefs
{
结构数组{
//二进制数组的特殊行为
}
}
看起来@monkeyking正在尝试将其变得更加明显,如下所示
template <typename T>
struct Array {
size_t x;
T *ary;
};
typedef Array<int> iArray;
typedef Array<float> fArray;
模板
结构数组{
尺寸x;
三元;
};
typedef数组;
typedef阵列远射线;
Hm,你是想把它放在struct之后吗?+1解释一下你的代码和@monkeyking的代码之间的区别。
template <typename T>
struct Array {
size_t x;
T *ary;
};
typedef Array<int> iArray;
typedef Array<float> fArray;