c++ - 如何在模板基类中调用模板成员函数?

标签 c++ templates c++11 using member-functions

在基类中调用非模板化成员函数时,可以将其名称通过 using 导入到派生类中,然后使用它。 这是否也适用于基类中的模板成员函数?

仅使用 using 它不起作用(使用 g++-snapshot-20110219 -std=c++0x):

template <typename T>
struct A {
  template <typename T2> void f() {  }
};

template <typename T>
struct B : A<T> {
  using A<T>::f;

  template <typename T2> void g() {
    // g++ throws an error for the following line: expected primary expression before `>`
    f<T2>();
  }
};

int main() {
  B<float> b;
  b.g<int>();
}

我知道像在

中那样显式地为基类添加前缀
    A<T>::template f<T2>();

工作正常,但问题是:是否可以不使用和使用简单的 using 声明(就像 f 不是模板函数的情况一样)?

如果这是不可能的,有人知道为什么吗?

最佳答案

这个作品(双关语):this->template f<T2>();

也是

template <typename T>
struct B : A<T> {
  template <typename T2> void f()
  { return A<T>::template f<T2>(); }

  template <typename T2> void g() {
    f<T2>();
  }
};

为什么 using不适用于依赖于模板的模板函数非常简单——语法不允许在该上下文中使用必需的关键字。

关于c++ - 如何在模板基类中调用模板成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5241481/

相关文章:

c++ - 如何禁用 GTK 拖放?

c++ - 语法错误:__asm__ ("some_code":::"cc")

c++ - 使用声明包含未扩展的参数包

c++ - 为什么 std::async 比简单的分离线程慢?

c++ - 结构体上的指针运算

c++ - 诊断神秘的 WM_PAINT 消息

c++ - 在已经是模板可变参数的函数中传递可变参数

c++ - 使用别名的显式模板实例化?

css - 当我点击一个链接时,如何使这个菜单在 Wordpress 上消失?

c++ - 指针非类型模板参数