Многоуровневое наследование CRTP создает промежуточный класс с другим параметром шаблона - PullRequest
1 голос
/ 18 октября 2019

Учитывая структуру класса CRTP многоуровневого наследования, например, где промежуточный класс B имеет другой параметр шаблона T, как мне создать экземпляр объекта B?

template<class Derived, class T>
struct A {
    void print(T t) { static_cast<Derived*>(this)->print(t); }
};

template<template <typename> class Derived, class T>
struct B : public A<Derived<T>, T> {
    void print(T t) { cout << t << " B!\n"; }
};

template<class T>
struct C : public B<C, T> {
    void print(T t) { cout << t << " C!\n"; }
};

int main() {
    C<int> c;
    c.print(5);

    // how do I instantiate a B?
}
...