Mei*_*Mei 4 c++ syntax templates language-lawyer
功能模板的语法
template <**class** T, ...>
returntype functionname(arguments)
{
.....
.....
}
Run Code Online (Sandbox Code Playgroud)
我有两个问题?
Mat*_*lia 11
这是一般的混乱,从的使用产生class的template争论.
那class件事与班级无关; 它只是说模板接受一个类型模板参数(而不是整数1模板参数),它可以是任何类型,而不仅仅是类.
那么,他们为什么选择class呢?因为他们必须使用一个肯定不会在任何C++程序中使用的关键字,或多或少"听起来不错" - 并且class没关系,因为它已经是C++中的保留关键字.
请注意,有一个替代class:typename关键字.它们完全相同2,但typename在我看来更清楚,因为这个名字只是说"接下来是一个类型论证",而不会让你认为它必须是一个类.
为什么允许两种语法?因为typename这个关键字,不要在语言推出后(当他们发现,这是有必要添加另一个关键字来消除歧义模板内的一些声明); 然后,它也为template参数声明"改装"了.class保留关键字的这种用法是为了与同时编写的程序/文档兼容.
template-parameter中的class和typename之间没有语义差异.
(C++ 11,§14.12)