对于具有多个模板函数的类,模板必须包含在每个声明中,如下所示:
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)
。我假设它只是将它分成两行!寻找确认。
答案 0 :(得分:2)
template
说明符必须出现在每个模板化函数之前。您的第二个示例将导致T
不是bar
的可识别类型的错误,因为在这种情况下template <typename T>
仅适用于foo
。
或者,如果要为类中的每个函数使用相同的类型,可以将整个类声明为模板:
template <typename T>
class Foo
{
public:
void foo(T a);
void bar(T b);
};