关于c ++:“template< class T>”和“template< typename T>”之间有什么区别?

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

那就没有区别了。使用classtypename(在引用类型的模板参数上下文中)是可互换的。

这里允许两个关键字的原因是历史的。有关详细说明,请参阅本文。


模板模板参数

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>

在其他情况下,它们可以互换。