在C的typedef
一個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;
};
同樣,我想爲一個C++容器指自己做這樣的事情:
typedef pair<unsigned, pair<node_t *, node_t * > > node_t;
,但當然,編譯器會抱怨說,在定義node_t
之前,它從來沒有聽說過node_t
,就像上面的struct typedef
那樣。
那麼有沒有類似於struct
的解決方法?或者更好的方法來做到這一點? (不,我不想使用void
指針。)
這是否有幫助:[STL映射到本身?](http://stackoverflow.com/questions/1403501/stl-map-onto-itself) –
你可以看看http://www.boost的實現。 org/doc/libs/1_57_0/boost/variant/recursive_variant.hpp或http://www.boost.org/doc/libs/1_57_0/boost/variant/recursive_wrapper.hpp – ForEveR
您的第一個案例在C++中是沒有問題的:'struct node_t {node_t * left'node_t * right; };'很好。另外,'std :: pair'不是一個容器。 – juanchopanza