Возможно ли следующее:Рекурсивный typedef
typedef Foo<Bar> Bar;
Мой компилятор жалуется, что «классная панель» имеет предыдущее объявление как «классная панель».
Возможно ли следующее:Рекурсивный typedef
typedef Foo<Bar> Bar;
Мой компилятор жалуется, что «классная панель» имеет предыдущее объявление как «классная панель».
Что вы делаете, это эквивалентно:
struct A {};
struct B {};
typedef A B;
, не удивительно это не законно.
Typedefs и классы не находятся в разных пространствах имен на C++, поэтому это не является законным в C++. –
Если Bar является классом в качестве параметра шаблона для Foo, он не может быть типизированным Foo<Bar>
в то же время.
Вы должны были бы обновить Bar, сначала как отдельный класс, а затем как экземпляр шаблона, но даже typedef Foo<Whatever> Bar;
не работал бы, если вы уже объявили Bar как класс.
Нет, это запрещено.
Почему было бы разумно сделать это? –
Рассмотрим машину состояний, где каждая функция состояния возвращает указатель на следующую выполняемую функцию. Типы таких функций являются рекурсивными. Вы можете выразить это с помощью классов (struct StateFunction {StateFunction operator() (void * context);};), но не с, скажем, сырыми функциями или typedefs. – DrPizza