而不是
template <typename T>
void func(T arg) {/* something */}
为什么我们不能这样做
template <T>
void func(T arg) {/* something */}
来自cplusplus.com:
两者之间的唯一区别 原型是使用的 关键字类或关键字typename。 由于两者兼而有之,它的用途不明显 表达式完全相同 意思和行为完全相同 方式。
这对我来说似乎是不必要的样板。
答案 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>
的情况。