Per un typedef
di un struct
in C, non posso fare questo:Come dichiarare un contenitore autoreferenziale in C++?
typedef struct {
unsigned id;
node_t *left;
node_t *right;
} node_t;
perché node_t
non è noto finché non viene definito, quindi non può essere utilizzato nella sua definizione. Un po 'di un Catch-22. Tuttavia, posso utilizzare questa soluzione per rendere il tipo autoreferenziale desiderata:
typedef struct node_s node_t;
struct node_s {
unsigned id;
node_t *left;
node_t *right;
};
Allo stesso modo, mi piacerebbe fare qualcosa di simile per un ++ contenitore C riferendosi a se stesso:
typedef pair<unsigned, pair<node_t *, node_t * > > node_t;
ma di Naturalmente, il compilatore si lamenta che non si è mai sentito parlare di node_t
prima che sia definito node_t
, come per il struct typedef
precedente.
Quindi c'è una soluzione come per lo struct
? O un modo migliore per farlo? (E no, non voglio usare i puntatori void
.)
Questo aiuto: [Mappa STL su sé stesso?] (Http://stackoverflow.com/questions/1403501/stl-map-onto-itself) –
È possibile osservare la realizzazione di http: //www.boost. org/doc/libs/1_57_0/boost/variant/recursive_variant.hpp o http://www.boost.org/doc/libs/1_57_0/boost/variant/recursive_wrapper.hpp – ForEveR
Il tuo primo caso è un non-problema in C++ : 'struct node_t {node_t * left 'node_t * right; }; 'è perfettamente a posto. Inoltre, 'std :: pair' non è un contenitore. – juanchopanza