可能重复:对模板参数使用'class'或'typename'?
我看到两个不同的模板类声明:
template <class T> class SampleClass1 { // ... };
和
template <typename T> class SampleClass2 { // ... };
这两个代码有什么区别?
编辑:我将错误的关键字“typedef”更正为“typename” .
如果通过
template <typedef T> class SampleClass2
你的意思是
template <typename T> class SampleClass2
那就没有区别了 . class 和 typename (在引用类型的模板参数的上下文中)的使用是可互换的 .
class
typename
这里允许两个关键字的原因是历史性的 . 有关详细说明,请参阅this article .
在模板模板参数的情况下
template <typename T, template <typename> class Wrapper> class Foo { //... private: Wrapper<T> data; };
你必须在classname之前使用class . 这是错的:
template <typename T, template <typename> typename Wrapper>
但这没关系:
template <typename T, template <class> class Wrapper>
在其他情况下,它们是可互换的 .
2 回答
如果通过
你的意思是
那就没有区别了 .
class
和typename
(在引用类型的模板参数的上下文中)的使用是可互换的 .这里允许两个关键字的原因是历史性的 . 有关详细说明,请参阅this article .
在模板模板参数的情况下
你必须在classname之前使用class . 这是错的:
但这没关系:
在其他情况下,它们是可互换的 .