Создание экземпляра шаблона в случае многоуровневого наследования
Я все еще в процессе изучения C++. Это мой сценарий. У меня есть три класса. Самый верхний базовый класс является шаблонным. Средний класс, основанный на базе, тоже является шаблонным. Производный (класс Concrete), который я собираюсь использовать, наследует средний класс. Я явно создаю экземпляр для среднего класса. Однако компилятор каждый раз выдает ошибку, говоря, что базовый класс не определен. Как создать экземпляр класса Middle таким образом, чтобы базовый класс был полностью определен?
Вот обзор того, как эти классы определены:
TopBase.h
template <class T>
class TopBase
{
typedef typename T::Concrete Concrete;
}
Middle.h
template <class T>
class Middle : public TopBase<T>
{
typedef typename T::Concrete Concrete;
}
Middle() : TopBase<T>() {}
Concrete.h
struct TConcrete {
static int x;
typedef Concrete instance;
}
class Concrete :
public Middle<TConcrete>
{
}
1 ответ
У вас есть ошибка в вашем экземпляре typedef Concrete, потому что конкретное имя типа используется при создании экземпляра Middle.
template <class T>
class TopBase
{
typedef typename T::Concrete Concrete;
};
template <class T>
class Middle : public TopBase<T>
{
public:
Middle() : TopBase<T>() {}
typedef typename T::Concrete Concrete;
};
class ConcreteX;
struct TConcrete {
static int x;
typedef ConcreteX Concrete; // <-- here was an error
};
class ConcreteX :
public Middle<TConcrete>
{
};