Я использую 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
заявление (это должно выглядеть примерно так using A<C<T>>::template g;
, но этот код не компилируется с моим компилятором). Но вы можете позвонить g<void>
метод одним из следующих способов:
this->template g<void>()
A<C<T>>::template g<void>()
Смотрите ответы на этот вопрос для деталей о темной стороне использования template
ключевое слово.
Других решений пока нет …