gpt4 book ai didi

c++ - 使用宏创建样板代码

转载 作者:太空狗 更新时间:2023-10-29 20:30:47 26 4
gpt4 key购买 nike

我有一堆类,如下所示,


class SomeClass : public Function{
public:

ref call(ref args){
// do & return stuff
}

int getType(){return TYPE;}
ref toString(){ return "SomeClass";}
};

我得到了大约 50 个,唯一不同的是调用函数的主体。是否可以使用一个宏来获取名称和主体并将“SomeClass”替换为名称并将主体插入调用函数?

最佳答案

当然。如果您有一个支持可变参数宏的编译器,则扩展 call 成员函数的主体会更容易一些。虽然我使用了 Boost.Preprocessor 的 stringize 宏,但编写您自己的宏是微不足道的。

#define DEFINE_CLASS(name, parenthesized_call_body)                 \
class name : public Function { \
ref call (ref args) { \
DEFINE_CLASS_CALL_BODY parenthesized_call_body \
} \
int getType() { return TYPE; } \
const char* toString() { return BOOST_PP_STRINGIZE(name); } \
};

#define DEFINE_CLASS_CALL_BODY(...) __VA_ARGS__

用作:

DEFINE_CLASS(SomeClass, (return ref()))

call 主体需要加括号,这样主体中出现的任何逗号都不会被视为宏参数分隔符。或者,您可以只在类定义中声明 call 函数,然后单独定义该函数。

关于c++ - 使用宏创建样板代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5924375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com