找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3794|回复: 2

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

[复制链接]
发表于 2014-6-24 15:43:06 | 显示全部楼层 |阅读模式
比较懒,又不想代码失去基本的优雅,于是写了这么一个玩意儿。
  1. #define MESSAGE_FUNCTION_BEGIN(x) switch(x) {
  2. #define MESSAGE_FUNCTION(x,y) case x: { y(x); break; }
  3. #define MESSAGE_FUNCTION_END }
  4. void Do_1(int x)
  5. {
  6.         printf("[Do_1]x=%d.\n", x);
  7. }
  8. void Do_2(int x)
  9. {
  10.         printf("[Do_2]x=%d.\n", x);
  11. }
  12. void Do_3(int x)
  13. {
  14.         printf("[Do_3]x=%d.\n", x);
  15. }
  16. void RegFunction(int x)
  17. {
  18.         MESSAGE_FUNCTION_BEGIN(x);
  19.         MESSAGE_FUNCTION(1, Do_1);
  20.         MESSAGE_FUNCTION(2, Do_2);
  21.         MESSAGE_FUNCTION(3, Do_3);
  22.         MESSAGE_FUNCTION_END;
  23. }
复制代码
嘿嘿,测试一下。
  1.         RegFunction(1);
  2.         RegFunction(2);
  3.         RegFunction(3);
复制代码
输出
[Do_1]x=1.
[Do_2]x=2.
[Do_3]x=3.


OK,懒惰成功!

发表于 2014-6-25 14:53:20 | 显示全部楼层
好像mfc,atl的消息处理好多宏也是这样搞的。

点评

错 形似 但是核心思想完全不同 mfc用的是动态函数指针 需要容器记下需要自行的函数地址 继承CWND,CWND有map用来记录this指针  详情 回复 发表于 2014-8-25 22:34
发表于 2014-8-25 22:34:07 | 显示全部楼层
sevencat 发表于 2014-6-25 14:53
好像mfc,atl的消息处理好多宏也是这样搞的。

错   形似  但是核心思想完全不同
mfc用的是动态函数指针   需要容器记下需要自行的函数地址    继承CWND,CWND有map用来记录this指针
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 02:35 , Processed in 0.014317 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表