C++ 在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;

我在玩弄模板。我不想重新创建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; 三元; };
您不需要为类和结构执行显式的
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;