Я создаю библиотеку и хочу, чтобы пользователь мог создать ее экземпляр следующим образом:
Код: Выделить всё
int main (int, char**)
{
Child_Type1 c1 = Child_Type1();
Child_Type2 c2 = Child_Type2();
// ...
}
Базовый класс определяется тремя аргументами шаблона и используется в качестве интерфейса для всех производных классов. Тип T представляет тип данных, тип U представляет сам производный класс, а тип W представляет внутренний класс U.
Код: Выделить всё
template
class Base
{
public:
virtual void test(void) = 0;
};
Одним из производных классов может быть:
Код: Выделить всё
template
class Child_Type1
{
class Inner;
public:
Inner* var;
void test(void) override
{
// some code here
}
};
Когда вложенный класс Inner определен для всех Child_TypeX с одинаковым именем, но с разными элементами, например:
Код: Выделить всё
template
class Child_Type1::Inner
{
T some_variable;
};
template
class Child_Type2::Inner
{
T other_variable
};
// etc.
Когда я пытаюсь создать наследование, например:
Я столкнулся с проблемой, поскольку Child_Type1::Inner еще не существует. Поскольку я не могу объявить об этом до этого наследования, мне интересно, есть ли у кого-нибудь идеи, как это обойти.
Подробнее здесь:
https://stackoverflow.com/questions/793 ... hild-class