3
我正在寻找一种方法或一种方法来从列表中生成typedefs列表和对象实例化列表宏调用,定义这些对象的类类型和构造函数参数。C/C++宏:如何使用一个宏(boost预处理器库?)生成两个单独的代码段
它应该看起来像下面的(不工作)代码。要解决的问题是从一个宏调用列表中生成两个不同列表的方法。我想这是一个问题,需要使用boost预处理器库部分来解决,但现在我已经粘贴了如何操作。
/////////////////////////////////////////////////////////////////////////////////
// MACRO-Definitions
#define DEF_OBJECT_TYPE(name, class, contructor_params) \
typedef class name ## type;
name ## type* name;
#define DEF_OBJECT_RUN(name, class, contructor_params) \
name ## type* name = new name ## type contructor_params; \
#define DEF_OBJECTS(definitions) \
/* Type-Header */ \
definitions \
/* Type-Footer */ \
/* Run-Header */ \
definitions \
/* Run-Footer */
#define OBJECT(name) (dynamic_cast<name ## type*>(name))
/////////////////////////////////////////////////////////////////////////////////
// Object-Definitions
DEF_OBJECTS(
DEF_OBJECT(Object1, CClass1, ("par1"))
DEF_OBJECT(Object2, CClass2, ("par1", "par1"))
)
/////////////////////////////////////////////////////////////////////////////////
// This shall be the result of the macro expansion
// shall expand to:
struct MyClass {
typedef class Object1type;
Object1type* Object1;
typedef class Object2type;
Object2type* Object2;
void Run();
}
void MyClass::Init() {
Object1type* Object1 = new Object1type("par1");
Object2type* Object2 = new Object2type("par1", "par2");
}
// end of expansion
/////////////////////////////////////////////////////////////////////////////////
// I want to use these automatic created objects in this way:
void MyClass::Run() {
OBJECT(Object1)->method_class1(1);
OBJECT(Object2)->method_class2(1,2);
}
感谢您的快速解决方案 - 它的工作原理! 生成TYPE0_DEF,TYPE1_DEF等.pp.宏接缝将成为boost-preprocessor-library的候选者。我会尽快尝试。 再次感谢! – Marcel 2010-03-02 13:19:58