Eur*_*us_ 2 c++ templates struct class
template<class T>
struct E{}; //// no error
template<struct T>
struct F{}; ////error
Run Code Online (Sandbox Code Playgroud)
错误:非类型模板参数不能具有类型“struct T”模板
如果除了默认和访问说明符之外,class和是相同的东西,那么为什么这不起作用?structprivatepublic
原因是struct和class是不同的关键字。即,它们不仅仅是词汇层面上彼此的别名,而且可以被不同地方的语言以不同方式使用。因此,它们在一种情况下表现相似的事实并不意味着您可以在另一种情况下互换使用它们。
正如您所说,它们在定义类时是相似的,但仅此而已。定义类型模板参数与定义类完全不同,并且它有自己的语法。该语法与定义类的语法无关,并且class从语法的角度来看,两者都使用关键字的事实可以被认为仅仅是巧合(这是一个有用的巧合,但仍然如此)。该语法规定在定义类型模板参数时必须使用class(或)。typename