非常简单:
template <class T>
void foo() {} //compiles
template <struct T>
void goo() {} //doesn't
Run Code Online (Sandbox Code Playgroud)
为什么?
class只是一个表示该T类型的关键字.它实际上并不意味着T必须是一个阶级.(例如你可以打电话foo<int>().)
使用class关键字是因为typename添加模板功能时不存在关键字.请参阅c ++,typename和class中的模板.