首页 文章

“template <class T>”和“template <typename T>”有什么区别? [重复]

提问于
浏览
12

可能重复:对模板参数使用'class'或'typename'?

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

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

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

这两个代码有什么区别?

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

2 回答

  • 17

    如果通过

    template <typedef T> class SampleClass2
    

    你的意思是

    template <typename T> class SampleClass2
    

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

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

  • 14

    在模板模板参数的情况下

    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>
    

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

相关问题