我正在寻找最好的方法来静态定义需要循环链接的 C/C++ 数据结构。例如,一棵树,其中孩子和父母都需要彼此的指针。
extern struct Op op_subops[4]; // fwd ref to children of ops
struct Op
{
const char *name;
struct Op *parent;
struct Op *children;
};
struct Op ops[128] = {
{"op",0,&op_subops[0]}
};
struct Op op_subops[4] = {
{"subop1",&ops[1],0},
{"subop2",&ops[1],0}
};
以上编译(g++ 5.2)。该extern
关键字似乎允许我从ops
into创建一个前向引用ops_subops
,而另一个方向自然而然地工作,因为ops
之前ops_subops
。
我不喜欢的是,我更喜欢两个数组static
(不在目标文件中创建公开可见的符号)。
我可以对其中一个方向使用整数索引,但这似乎有点做作,我宁愿让链接器为我解析地址。
任何人都有一个神奇的关键字来完成这项工作?
谢谢!
编辑:我需要避免使用 C++ 静态构造函数和前沿 C++17 扩展(遗憾的是)。而且我的方法需要独立于平台。