私が抱えている問題は、次のコードに示されています。
#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モジュールがコンパイル時に配線される方法とよく似ています)。ビルドに s を追加することで拡張可能 (プラグ可能) な拡張可能なコンパイル時構造を構築する必要があり#include
ます。これにより、すべてのプラグインを含む一意の名前を持つ boost-mpl-vector が生成されます。したがって、が一意の終了名である場合、X_0、X_1、X_2 は、ベクトルに mpl-vectorが適用されているX
ため、途中で構築される名前です。push_back
boost:: preprocessorの抽象化が重要であることはわかっていますが、最終的にコンパイル時にモジュール化されるシステムの一部を試作しているため、まだ調査に時間を費やしたくありません。
というわけで、今後の参考までに
- 上記のエラーが表示されるのはなぜですか?
- 正しい生のプリプロセッサ パターンはどのように見えるべきか。
- 正しいブースト プリプロセッサ ライブラリ パターンはどのように見えますか。