是否需要为每个模板函数声明模板<类型名 T>?

Does template <typename T> need to be declared for each template function?

本文关键字:lt gt 类型 函数 是否 声明      更新时间:2023-10-16

对于有多个模板函数的类,是否必须像这样在每个声明中包含template:

class Foo
{
    public:
        template <typename T>
        void foo(T a);
        template <typename T>
        void bar(T b);
}

或者你可以像这样在第一个声明中包含template <typename T>:

class Foo
{
    public:
        template <typename T>
        void foo(T a);
        void bar(T b);
}

我怀疑只有第一个是有效的,因为没有;,它使我认为声明实际上是template <typename T> void foo(T a),如果写在一行上。我想这只是惯例,把它分成两行!

template指定符必须出现在每个模板函数之前。您的第二个示例将导致一个错误,即T不是bar的可识别类型,因为在本例中template <typename T>仅适用于foo

或者,如果您想为类中的每个函数使用相同的类型,您可以将整个类声明为模板:

template <typename T>
class Foo
{
public:
    void foo(T a);
    void bar(T b);
};