下面的代码说明了我遇到的问题。
#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模块在编译时的连接方式)。我需要构建一个可扩展的编译时结构,通过将#include
s 添加到我的构建中,它是可扩展的(可插入的),这会产生一个具有唯一名称的 boost-mpl-vector,其中包含我所有的插件。因此,如果X
是唯一的结束名称,则 X_0、X_1、X_2 是在向量应用了 mpl-vector 时沿途建立的名称push_back
。
我知道boost::preprocessor 的抽象是关键,但我还不想花时间研究它,因为我正在对系统的一部分进行原型设计,最终将在编译时模块化。
所以,为了以后的参考,
- 为什么我在上面收到错误?
- 正确的原始预处理器模式应该是什么样子。
- 正确的 boost-preprocessor-library 模式是什么样的。