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

标签 c++ templates

<分区>

Possible Duplicate:
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
}

标记行上的编译器错误是: 错误:“>”标记之前的预期初始值设定项

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

最佳答案

这对您来说是两阶段查找。这样做:

I.template f<U>();

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

为了解决这个歧义,你需要告诉编译器开<实际上是开始一个模板实例化。

关于c++ - 在外部函数模板中调用类模板的函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7810618/

相关文章:

c++ - cr2 提取具有特定焦距的图像

c++ - 管理 C++ 委托(delegate)生命周期

c++ - 为什么单例模板会使我的程序崩溃?

c++ - 访问模板化基类的模板化方法

c++ - 为什么需要在 move 构造函数中将右值引用设置为空?

c# - 通过 C++ "Loader"加载 C# 应用程序?

c++ - 千分之一符号 (‰) 上的 wctomb 扼流圈

c++ - 为什么带有析构函数的类不能简单地移动构造?

java - 如何在 Eclipse 中包含 Javascript 文件以解决 HTML/JSP 文件中的 Javascript 警告?

go - 使用 Go 模板中的变量键访问映射值