我有問題在下面的代碼中說明。C++通用編程微妙
#include <iostream>
#define X 4
int main()
{
std::cout << "should be 4: " << X << std::endl;
#define Y X + 4
std::cout << "should be 8: " << Y << std::endl;
#undef Y
#define Y X+0
#undef X
#define X Y+1
std::cout << "expecting 5: " << X << std::endl;
}
錯誤:
test2.cc: In function ‘int main()’:
test2.cc:17: error: ‘X’ was not declared in this scope
我試圖效仿的代碼擴展程序/建造水平模式(很像nginx模塊是如何wired up at compile-time)。我需要建立一個可擴展的編譯時結構,這個結構是可擴展的(可插入的),通過將#include
添加到我的構建中,導致boost-mpl-vector具有包含我所有插件的唯一名稱。因此,如果X
是唯一的最終名稱,則X_0,X_1,X_2是在向量應用mpl-vector push_back
時沿途建立的名稱。
我知道 boost :: preprocessor的抽象是關鍵,但我不想花時間去研究它,因爲我正在原型化系統的一部分,最終將編譯時模塊化。
所以,以供將來參考,
- 爲什麼會出現上述錯誤?
- 正確的原始預處理器模式應該是什麼樣子。
- 正確的boost-preprocessor-library模式是什麼樣的。
您是否嘗試過通過預處理器運行以查看C++編譯器正在嘗試編譯的內容? – 2011-04-08 09:16:31