Mar*_*ler 11 c++ containers typedef self-reference
对于C中typedef的a struct,我不能这样做:
typedef struct {
unsigned id;
node_t *left;
node_t *right;
} node_t;
Run Code Online (Sandbox Code Playgroud)
因为node_t直到它被定义才知道,所以它不能用在它自己的定义中.有点像Catch-22.但是,我可以使用此变通方法来创建所需的自引用类型:
typedef struct node_s node_t;
struct node_s {
unsigned id;
node_t *left;
node_t *right;
};
Run Code Online (Sandbox Code Playgroud)
同样,我想对引用自身的C++容器做类似的事情:
typedef pair<unsigned, pair<node_t *, node_t * > > node_t;
Run Code Online (Sandbox Code Playgroud)
但是当然,编译器抱怨它node_t在定义之前从未听说过node_t,就像struct typedef上面所说的那样.
那么有没有像这样的解决方法struct?还是一些更好的方法来做到这一点?(不,我不想使用void指针.)
Rab*_*d76 10
你可以这样做:
struct node_t : std::pair<unsigned, std::pair<node_t *, node_t * > >
{};
Run Code Online (Sandbox Code Playgroud)
经过struct node_t编译器知道有名称的类型node_t存在,类似于向前声明.