使用模板库的模板函数声明 class
using declarations for template function of template base class
我想使用基class的模板函数,像这样:
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>(); }
但是直接引用基础 class 而不是模板是可行的:
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>(); }
};
为什么第一个版本无法编译而第二个版本可以。我需要做些什么才能让它发挥作用?
编译器不知道 f<int>()
中的 f
是模板,因此出现错误消息。
你可以在没有 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>(); }
};
我想使用基class的模板函数,像这样:
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>(); }
但是直接引用基础 class 而不是模板是可行的:
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>(); }
};
为什么第一个版本无法编译而第二个版本可以。我需要做些什么才能让它发挥作用?
编译器不知道 f<int>()
中的 f
是模板,因此出现错误消息。
你可以在没有 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>(); }
};