2011-03-15 19 views
0

我正在用C++編寫一個程序,使用了一些常量數據。我在啓動時以程序方式構建數據,而不再對其進行更改。我知道理想情況下數據應該是二進制文件中的靜態數據,但事實並非如此,因爲我必須首先構建它們。作爲語言特性的靜態數據定義

在C++中,我可以在具有該數據的類中定義static const的成員,或者簡單地在全局const s中定義成員。通過這樣做,我可以在二進制文件中獲得靜態數據,但是我不能編寫它們的內容。我將不得不在其他地方構建它們並將結果粘貼到代碼中。在我的情況下,它將是一堆在源文件中被醜陋和無意義編碼的二進制數據。

所以我開始懷疑,是否有任何語言支持這種功能,使我能夠在程序上定義靜態數據,但是在編譯時解決它並嵌入到二進制文件中?任何一種優化都可以處理這些情況嗎?如果生成數據的過程/函數不採用外部參數並且具有可預測的結果,則可以使用編譯器的結果對其進行安全優化。編譯器是否採取這種方式?你知道的任何語言都明確地對待這件事嗎?

我知道C預處理器,但它實際上不是圖靈兼容的,它的語法並不像它是一個函數修飾符那樣有吸引力,它告訴它它應該在編譯時解析。

+0

計算數據的過程有多複雜?它一次產生一個元素嗎?這將使模板和/或預處理器變得更容易。 – 2011-03-15 02:27:53

回答

0

構建一個程序來生成數據(您已經擁有該數據),使用C++輸出,將生成的代碼添加到您的Makefile中,並使用#include生成的數據。

+0

看起來這是最爲理智的方法,如果我不想做模板魔法並在其上扭轉我的大腦。但我仍然認爲編程語言缺乏對編譯時間,可讀圖靈完整解決方案的支持...... – lvella 2011-11-03 03:51:55

0

C++模板是圖靈完備的,經常用來計算編譯時常量。

+0

循環,三角函數和所有? – lvella 2011-03-15 02:26:46

+0

@Ivella:如果你願意,你可以寫這些東西。本地沒有浮點數,但我相信Boost有編譯時的合理性。 – 2011-03-15 03:18:37

+0

你可以用模板做一些非常了不起的事情:http://drdobbs.com/cpp/199500857 – Gabe 2011-03-15 03:26:37