Любопытно повторяющиеся проблемы подклассов, зависящие от параметров шаблона и шаблона

Я пытаюсь заставить работать следующий код

template < class __derived, class __object = typename __derived::Object >
struct Base {
    using Derived = __derived;
    using Object = __object;
    void function(Object o) { return Derived::function(s); }
}

//template < class __derived >
//struct Base {
//    using Derived = __derived;
//    using Object = typename Derived::Object;
//    void function(Object o) { return Derived::function(s); }
//}

template < class __object >
struct Derived : public Base< Derived< __Object > > {
    using Object = __object;
    void function(Object o) { ... }
}

И я создаю экземпляр объекта, объявив

Derived<double> obj;

Проблема в том, что компилятор утверждает, что не может найти символObject внутриDerived класс при выводе второго параметра шаблона дляBase учебный класс. Та же ошибка также генерируется закомментированной версией.

Я пытаюсь сделать это под вдохновением кода Eigen3, в частности CRTP (CURLYURURURRING Template Pattern), который они используют, чтобы избежать использования виртуальных функций. Eigen3 на самом деле используетtraits класс, но я не могу понять, как имитировать это для настоящего случая. У кого-нибудь есть предложения по этому поводу? Заранее спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос