宏的一个好玩的用法

宏的作用主要是将重复代码断进行替换,让代码简洁美观。

有一种好玩的做法是将对象以及操作都抽出来,做成两个宏,然后使用这个双层宏就可以省略大段重复代码。

例:

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中再去写初始化和刷新。

在一个大的系统中,总会有这样的子系统,里面有很多相似的类,他们有很多相似的操作,每次新增,都需要注册,初始化,读取等一样的操作。我们就可以使用这种办法来减少工作量。

posted on 2018-10-24 14:51  YoungBig  阅读(292)  评论(0编辑  收藏  举报

导航