我需要这样写函数:
void foo()
{
//some details
}
enum fun_names
{
fun_name_foo,
};
所以我做了2个宏:
#define MAKE_FUN(fun) void fun(){}
#define ADD_FUN(fun) fun_name_##fun,
然后像这样使用它们:
MAKE_FUN(foo)
MAKE_FUN(bar)
enum fun_names
{
ADD_FUN(foo)
ADD_FUN(bar)
};
但如您所见,我重复了 2 个参数完全相同的宏。是否可以像这样制作一个宏?
CREATE_FUN(foo)
CREATE_FUN(bar)
这样可以节省代码行并且不易出错。
最佳答案
一个可能的技巧可能是让一个宏以宏名作为参数
#define DO_ENUM(Mac) \
Mac(foo) \
Mac(bar)
然后
#define DECLARE_ENUM(X) X,
enum fun_names {
Nothing,
DO_ENUM(DECLARE_ENUM)
};
#undef DECLARE_ENUM
并声明函数:
#define DECLARE_FUN(X) void myfun_##X(void);
DO_ENUM(DECLARE_FUN)
#undef DECLARE_FUN
等等。
另一种方法可能是生成一些专门的头文件,例如使用一些 awk
脚本,来自另一个包含函数列表等的文件。
关于c++ - 枚举 C++ 中的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32794177/