При a typedef
a struct
в C я не могу этого сделать:
typedef struct {
unsigned id;
node_t *left;
node_t *right;
} node_t;
потому что node_t
неизвестно до тех пор, пока оно не определено, поэтому оно не может использоваться в собственном определении. Немного Catch-22. Тем не менее, я могу использовать это обходное решение для создания желаемого самореферентного типа:
typedef struct node_s node_t;
struct node_s {
unsigned id;
node_t *left;
node_t *right;
};
Аналогично, я хотел бы сделать что-то подобное для контейнера С++, ссылающегося на себя:
typedef pair<unsigned, pair<node_t *, node_t * > > node_t;
но, конечно, компилятор жалуется, что он никогда не слышал о node_t
, прежде чем он определил node_t
, как это было бы для struct typedef
выше.
Так есть обходной путь, как для struct
? Или лучший способ сделать это? (И нет, я не хочу использовать указатели void
.)