我正在使用CRTP,基类具有模板功能。我怎样才能use
该模板派生类中的成员函数?
template <typename T>
struct A {
int f();
template <typename S>
int g();
};
struct B: public A<B> {
int h() { return f() + g<void>(); } // ok
};
template <typename T>
struct C: public A<C<T>> {
// must 'use' to get without qualifying with this->
using A<C<T>>::f; // ok
using A<C<T>>::g; // nope
int h() { return f() + g<void>(); } // doesn't work
};
*编辑* 之前的问题,Using declaration for type-dependent template name,包括评论,表明这是不可能的,可能是标准中的疏忽。
答案 0 :(得分:2)
我不知道如何使用using
语句来解决问题(它应该看起来像using A<C<T>>::template g;
,但是这段代码不能用我的编译器编译)。但您可以通过以下方式之一调用g<void>
方法:
this->template g<void>()
A<C<T>>::template g<void>()
有关使用template
关键字的黑暗面的详细信息,请参阅this question的答案。