是否需要为每个模板函数声明模板<typename t =“”>?</typename>

时间:2014-03-19 01:29:42

标签: c++ templates

对于具有多个模板函数的类,模板必须包含在每个声明中,如下所示:

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)。我假设它只是将它分成两行!寻找确认。

1 个答案:

答案 0 :(得分:2)

template说明符必须出现在每个模板化函数之前。您的第二个示例将导致T不是bar的可识别类型的错误,因为在这种情况下template <typename T>仅适用于foo

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

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