“template <class t =”“>”和“template <typename t =”“>”?</typename> </class>之间的区别是什么?

时间:2010-12-26 15:18:37

标签: c++ templates class

  

可能重复:
  Use 'class' or 'typename' for template parameters?

我看到两个不同的模板类声明:

template <class T> class SampleClass1
{
    // ...
};

template <typename T> class SampleClass2
{
    // ...
};

这两个代码有什么区别?

编辑:我将错误的关键字“typedef”更正为“typename”。

2 个答案:

答案 0 :(得分:18)

如果通过

template <typedef T> class SampleClass2
你的意思是

template <typename T> class SampleClass2
然后没有区别。使用classtypename(在引用类型的模板参数的上下文中)是可以互换的。

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

答案 1 :(得分:15)

如果是模板模板参数

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>

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