簡體   English   中英

枚舉C ++中的宏

[英]macro inside enum c++

我需要編寫這樣的函數:

void foo()
{
    //some details
}
enum fun_names
{
    fun_name_foo,
};

所以我做了兩個宏:

#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)
};

但是正如您所看到的,我在重復兩個具有完全相同參數的宏。 是否可以像這樣制作一個宏?

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腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM