freeeyes 发表于 2014-6-24 15:43:06

懒人用宏替换大量case语句的方法

比较懒,又不想代码失去基本的优雅,于是写了这么一个玩意儿。

#define MESSAGE_FUNCTION_BEGIN(x) switch(x) {
#define MESSAGE_FUNCTION(x,y) case x: { y(x); break; }
#define MESSAGE_FUNCTION_END }

void Do_1(int x)
{
        printf("x=%d.\n", x);
}

void Do_2(int x)
{
        printf("x=%d.\n", x);
}

void Do_3(int x)
{
        printf("x=%d.\n", x);
}

void RegFunction(int x)
{
        MESSAGE_FUNCTION_BEGIN(x);
        MESSAGE_FUNCTION(1, Do_1);
        MESSAGE_FUNCTION(2, Do_2);
        MESSAGE_FUNCTION(3, Do_3);
        MESSAGE_FUNCTION_END;
}
嘿嘿,测试一下。
        RegFunction(1);
        RegFunction(2);
        RegFunction(3);
输出
x=1.
x=2.
x=3.


OK,懒惰成功!

sevencat 发表于 2014-6-25 14:53:20

好像mfc,atl的消息处理好多宏也是这样搞的。

minchieh 发表于 2014-8-25 22:34:07

sevencat 发表于 2014-6-25 14:53
好像mfc,atl的消息处理好多宏也是这样搞的。

错   形似但是核心思想完全不同
mfc用的是动态函数指针   需要容器记下需要自行的函数地址    继承CWND,CWND有map用来记录this指针
页: [1]
查看完整版本: 懒人用宏替换大量case语句的方法