为什么我们必须做模板<class typename =“”> T而不是模板T </class>

时间:2011-07-03 03:21:29

标签: c++ templates

而不是

template <typename T>
void func(T arg) {/* something */}

为什么我们不能这样做

template <T>
void func(T arg) {/* something */}

来自cplusplus.com:

  

两者之间的唯一区别   原型是使用的   关键字类或关键字typename。   由于两者兼而有之,它的用途不明显   表达式完全相同   意思和行为完全相同   方式。

这对我来说似乎是不必要的样板。

2 个答案:

答案 0 :(得分:11)

http://www.cplusplus.com/doc/tutorial/templates/请参阅模板的非类型参数部分。

您需要一些关键字来区分类型参数和非类型参数。

template <class T, int N>
class mysequence {
    T memblock [N];
  public:
    void setmember (int x, T value);
    T getmember (int x);
};

答案 1 :(得分:8)

因为模板参数并不总是类型。您可以使用模板参数作为整数值,例如std::bitset<size_t N>的情况。