Любопытно повторяющиеся проблемы подклассов, зависящие от параметров шаблона и шаблона
Я пытаюсь заставить работать следующий код
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
класс, но я не могу понять, как имитировать это для настоящего случая. У кого-нибудь есть предложения по этому поводу? Заранее спасибо!