What is the difference between “template <class T>” and “template <typename T>”?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Use 'class' or 'typename' for template parameters?
我看到两个不同的模板类声明:
1 2 3 4 | template <class T> class SampleClass1 { // ... }; |
和
1 2 3 4 | template <typename T> class SampleClass2 { // ... }; |
这两种密码有什么区别?
编辑:我把错误的关键字"typedef"改为"typename"。
如果通过
1 | template <typedef T> class SampleClass2 |
你的意思是
1 | template <typename T> class SampleClass2 |
那就没有区别了。使用
这里允许两个关键字的原因是历史的。有关详细说明,请参阅本文。
模板模板参数
1 2 3 4 5 6 | template <typename T, template <typename> class Wrapper> class Foo { //... private: Wrapper<T> data; }; |
你必须在类名之前使用类。这是错误的:
1 | template <typename T, template <typename> typename Wrapper> |
但这是可以的:
1 | template <typename T, template <class> class Wrapper> |
在其他情况下,它们可以互换。