无法将模板化函数显式实例化为模板化类

时间:2014-02-09 21:23:56

标签: c++ templates

我不明白为什么以下代码不起作用,为什么我不能显式实例化模板化函数?如果我删除< 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’

1 个答案:

答案 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