enum c ++中的宏

时间:2015-09-26 06:04:12

标签: c++ macros

我需要编写这样的函数:

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)

这样可以节省代码行,并且不易出错。

1 个答案:

答案 0 :(得分:2)

一个可能的技巧可能是让一个宏将宏名称作为参数

min()

然后

#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 脚本,来自另一个包含函数列表等的文件。