所以我建立一个语法编译器ANTLR和一些生成的代码看起来是这样的:静态初始化顺序失败:相同的编译单元?
const int ExampleClass::EXAMPLEVAR = OtherExample::OTHEREXAMPLEVAR;
正如你可以看到这符合“静态变量初始化顺序的悲剧”的描述。
问题是,这个项目的目标之一是生成的C++代码可以用作进一步语法编译的基础,尽可能容易。
这就是为什么在这种情况下“首次使用构造”范式可能是一个问题:区分静态变量或静态函数将会困难得多。
现在我已经阅读了几次,如果这些静态变量在单个编译单元中初始化,则问题不存在。
所以我有这种想法将所有这些冲突的情况移动到由它们的依赖关系排序的单独的.cpp文件中。
这些相互矛盾的情况下,生成的代码是这样的:
//StaticInitializations.cpp
#include "ExampleClass.h"
#include "OtherExample.h"
const int OtherExample::OTHEREXAMPLEVAR = 3;
const int ExampleClass::CHANNEL_TYPE_TV = OtherExample::OTHEREXAMPLEVAR;
我的问题是:将这项工作?
有'[static-order-fiasco]'标签?哇。 – NPE 2013-03-15 08:36:00
为什么不能这样工作?这应该。 – Pubby 2013-03-15 08:37:22
技术问题:是的,在一个编译单元中,所有对象都按照它们出现的顺序进行初始化。另一个问题是:你能维持这个吗? – 2013-03-15 08:39:51