所以我建立一個語法編譯器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