在外部函数模板中调用类模板的函数模板

时间:2011-10-18 16:30:27

标签: c++ templates

  

可能重复:
  Where and why do I have to put “template” and “typename” on dependent names?

我有以下星座:

template<typename T>
class A{
  template<typename U>
  A<U> f()const;
}

template<typename T, typename U>
A<U> F(const A<T> &I)
{
   return I.f<U>();//this does not work
}

标记行上的编译器错误是: error: expected initializer before ‘>’ token

那么我该如何正确地写行?

2 个答案:

答案 0 :(得分:6)

这是你的两阶段查找。这样做:

I.template f<U>();

这是必要的,因为当编译器编译函数模板F()时,它不知道它可能被实例化的T。 <{1}}的定义后,A可以是专门的,只有在实际实例化F()时才会知道。因此,当编译器遇到其定义时,F()也可以是I.f<U成员f与某些A<T>之间的比较。

为了解决这种歧义,您需要告诉编译器开放U实际上是在启动模板实例化。

答案 1 :(得分:4)

试试这个:

   return I.template f<U>();