懒人用宏替换大量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,懒惰成功!
好像mfc,atl的消息处理好多宏也是这样搞的。 sevencat 发表于 2014-6-25 14:53
好像mfc,atl的消息处理好多宏也是这样搞的。
错 形似但是核心思想完全不同
mfc用的是动态函数指针 需要容器记下需要自行的函数地址 继承CWND,CWND有map用来记录this指针
页:
[1]