Как директива using работает с функциями-членами шаблона

Я использую 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
};

* Редактировать *
Более ранний вопрос, Использование объявления для типозависимого имени шаблона, включая комментарии, предполагает, что это невозможно и может быть упущением в стандарте.

3

Решение

Я не знаю, как решить проблему с using заявление (это должно выглядеть примерно так using A<C<T>>::template g;, но этот код не компилируется с моим компилятором). Но вы можете позвонить g<void> метод одним из следующих способов:

  • this->template g<void>()

  • A<C<T>>::template g<void>()

Смотрите ответы на этот вопрос для деталей о темной стороне использования template ключевое слово.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]