使用模板基类

时间:2017-03-27 18:55:28

标签: c++ templates inheritance using-statement

我想使用基类的模板函数,如下所示:

struct A {
  template <class T> static auto f() { \*code*\ }
};

template <class A_type> struct B : public A_type {

  using A_type::f;

  void g() { auto n = f<int>(); }
};

然而,这不会编译。

error: expected '(' for function-style cast or type
      construction
  void g() { auto n = f<int>(); }
                        ~~~^
error: expected expression
  void g() { auto n = f<int>(); }

但直接引用基类而不是模板确实有效:

struct A {
  template <class T> static auto f() { \*code*\ }
};

template <class A_type> struct B : public A_type {

  using A::f;

  void g() { auto n = f<int>(); }
};

为什么第一个版本没有编译而第二个版本没有编译。我需要做些什么才能使其发挥作用?

1 个答案:

答案 0 :(得分:3)

编译器不知道f中的f<int>()是模板,因此是错误消息。

你可以在没有using的情况下这样做:

struct A {
    template <class T> static auto f() { /*code*/ }
};

template <class A_type> struct B : public A_type {
    void g() { auto n = A_type::template f<int>(); }
};