我不明白为什么以下代码不起作用,为什么我不能显式实例化模板化函数?如果我删除< int> 我得到一个“没有匹配的函数调用”
#include <iostream>
using namespace std;
template <typename T>
class Xclass
{
public:
template <typename Y>
void xfunc()
{
cout << "Hello";
}
};
template<typename T2>
class Z
{
public:
void x2()
{
Xclass<T2> obj;
obj.xfunc<int>();
}
};
int main() {
Z<int> obj;
obj.x2();
return 0;
}
错误是:
prog.cpp: In member function ‘void Z<T2>::x2()’:
prog.cpp:24:15: error: expected primary-expression before ‘int’
obj.xfunc<int>();
^
prog.cpp:24:15: error: expected ‘;’ before ‘int’
答案 0 :(得分:3)
由于obj
的类型是依赖类型,因此必须使用template
关键字告诉编译器它是一个模板:
Xclass<T2> obj;
obj.template xfunc<int>();
请参阅Where and why do I have to put the "template" and "typename" keywords?,详细说明何时必须使用template
。