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

Ave*_*y3R 7 c++ templates

代替

template <typename T>
void func(T arg) {/* something */}
Run Code Online (Sandbox Code Playgroud)

我们为什么不能这样做

template <T>
void func(T arg) {/* something */}
Run Code Online (Sandbox Code Playgroud)

来自cplusplus.com:

两个原型之间的唯一区别是使用关键字class或关键字typename.它的使用是模糊的,因为两个表达式具有完全相同的含义并且行为完全相同.

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

Jus*_*dro 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);
};
Run Code Online (Sandbox Code Playgroud)


Joh*_*nck 8

因为模板参数并不总是类型.您可以使用一个模板参数作为整数值,例如,如下所示std::bitset<size_t N>.