C++ 为什么我们必须做模板<;类别/类型名称>;而不仅仅是模板T

C++ 为什么我们必须做模板<;类别/类型名称>;而不仅仅是模板T,c++,templates,C++,Templates,而不是 template <typename T> void func(T arg) {/* something */} 模板 void func(T arg){/*某物*/} 为什么我们不能这样做 template <T> void func(T arg) {/* something */} 模板 void func(T arg){/*某物*/} 从cplusplus.com: 两者之间唯一的区别是 原型是使用 关键字类或关键字typename。 它的用途是模糊

而不是

template <typename T>
void func(T arg) {/* something */}
模板
void func(T arg){/*某物*/}
为什么我们不能这样做

template <T>
void func(T arg) {/* something */}
模板
void func(T arg){/*某物*/}
从cplusplus.com:

两者之间唯一的区别是 原型是使用 关键字类或关键字typename。 它的用途是模糊的,因为两者 表达方式完全相同 意思和行为完全相同 对


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

因为模板参数并不总是类型。您可以有一个作为整数值的模板参数,例如,在
std::bitset

的情况下,请参见关于模板的非类型参数的部分

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

template <class T, int N>
class mysequence {
    T memblock [N];
  public:
    void setmember (int x, T value);
    T getmember (int x);
};
模板
类mysequence{
T memblock[N];
公众:
void setmember(int x,T值);
T getmember(intx);
};
甚至
模板
,以显示所有三个可能的模板参数。