宏的一个好玩的用法
宏的作用主要是将重复代码断进行替换,让代码简洁美观。
有一种好玩的做法是将对象以及操作都抽出来,做成两个宏,然后使用这个双层宏就可以省略大段重复代码。
例:
void FuncA() { Btn1->OnInit(pController); Btn2->OnInit(pController); Btn3->OnInit(pController); Btn4->OnInit(pController); Btn5->OnInit(pController); } void FuncB() { Btn1->RefreshContent(); Btn2->RefreshContent(); Btn3->RefreshContent(); Btn4->RefreshContent(); Btn5->RefreshContent(); }
我想将这段代码优化,可以这么做:
#define PAGE_BTN_LIST(OP)\ OP(Btn1)\ OP(Btn2)\ OP(Btn3)\ OP(Btn4)\ OP(Btn5)\ void FuncA() { #define BTN_ONINIT(Btn) Btn->OnInit(pController); PAGE_BTN_LIST(BTN_ONINIT) #undef BTN_ONINIT } void FuncB() { #define BTN_REFRESH(Btn) Btn->RefreshContent(); PAGE_BTN_LIST(BTN_REFRESH) #undef BTN_REFRESH }
这里经过了两次转换,分别将对象,操作进行了整合,使得代码变得精炼。
这样的好处是,以后新增一个Btn,就只需要在PAGE_BTN_LIST这个宏中新增一行代码就可以了,无需再去FuncA和FuncB中再去写初始化和刷新。
在一个大的系统中,总会有这样的子系统,里面有很多相似的类,他们有很多相似的操作,每次新增,都需要注册,初始化,读取等一样的操作。我们就可以使用这种办法来减少工作量。