使用C ++中的模板变量进行结构化

时间:2010-03-15 15:26:02

标签: c++ class templates struct

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

我可以执行以下操作吗?

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

我要做的是基本的模板化版本:

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

如果我使用类而不是struct,它看起来有效,那么typedef结构是不可能的呢?

8 个答案:

答案 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;