Передайте имя типа снизу вверх в C ++ CRTP - PullRequest
0 голосов
/ 27 апреля 2020

У меня проблема с CRTP . То, что я хочу, это передать объявление typename снизу вверх (от производного класса к базовому классу), что кажется невозможным, поскольку производный класс неполон в точке, генерирующей базовый класс.

Какие-либо решения? Конечно, параметры шаблона делают это, но это не элегантно.

template <typename S>
class A
{
public:
    using T = typename S::T; // error
};

template <typename S>
class B : public A<B<S>>
{
public:
    using T = typename S::T; // error
};

template <typename U>
class C : public B<C<U>>
{
    using T = U;
};
...