switch-case

原创 2013年12月06日 00:10:13

看见长串的switch-case,而且里面基本没有处理什么的,就浑身不舒服。但是项目长年累月,这个代码是不让动了,就让我吐槽下吧。

switch-case大致分为以下几种(根本原因也就一种)

1、case某个消息ID,发往的模块ID=X;

这个看起来清爽,基本实际情况是:

case某个消息ID

case某个消息ID

case某个消息ID

case某个消息ID

case某个消息ID

case某个消息ID

case某个消息ID

case某个消息ID

case某个消息ID

case某个消息ID,

发往的模块ID=X;

叹气,我一同事要添加12个ID,崩溃的问我,switch-case能不能有范围?

其实某个ID发往某个模块,模块ID都是确定的,完全可以写入map,或者数组,还不费事。


2、case某个ID,调用某个函数(C函数)。

3、花哨点,将case弄成宏,宏里面是模板,模板用消息ID实例化模板。--明显的过度使用模板嘛!

唯一的不同时函数的传参不同。


回来的路上,我就想,怎样简单方便的将这些函数装入map。暂时没找到方法。

不过,乖乖,你的分发函数的传参不是都一样的吗?多余的函数谁整出来的?还不就是通过这个分发函数的传参。那些函数明明可以让传参相同的嘛。


--------------------------------------------------------------------------------------------------------

不过,有什么办法,可以简单的通过消息ID立马就找到某个参数不同的函数呢?


1、之前见到有个使用的方法是,调用存储结构。让用户调用接口之前把参数放在一个结构里,之后根据消息id查询存储结构名称以及调用该存储结构所需要的参数。再调用sql方法。
不过各种参数怎么可以放入到一个结构中呢?这个是这样处理的。客户端发送的消息是字符串,我们根据消息ID,将字符串进行解析,将各个参数恢复成enum、long、bool等,没有其他复杂的class类型啦(最多有string,这个记不得了)。那个结构中有保存参数名对应参数类型,相应的类型有相应的map,这样便可以找到了。

那一般的代码里面应该如何使用呢?我现在想到的就是宏与连接符。验证后再说吧~




switch一道面试题

switch一道面试题
  • jsqfengbao
  • jsqfengbao
  • 2015年03月29日 10:04
  • 788

用switch-case调戏java编译器

了解java编译器对switch-case的实现
  • oscaryue
  • oscaryue
  • 2017年07月17日 11:42
  • 184

使用函数指针来代替switch语句

Normal 0 7.8 磅 0 2 false false false Microsof...
  • testing2007
  • testing2007
  • 2009年06月26日 14:49
  • 1804

汇编的switch case

C: switch(c){ case 0: }
  • hutao1101175783
  • hutao1101175783
  • 2014年10月16日 21:36
  • 515

switch-case练习

#include"stdio.h" int main() { int num; printf("Please enter the number:\n"); scanf("%d",&num); ...
  • u014102145
  • u014102145
  • 2015年03月12日 16:50
  • 239

switch-case 注意!

case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即"只是开始执行处的入口标号".因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行,而且执行完一个case后面...
  • qin_zhu
  • qin_zhu
  • 2012年11月06日 14:50
  • 144

switch-case流程图

switch (p) { case 1: process 1 break; case 2: process 2 brea...
  • Firewall5788
  • Firewall5788
  • 2017年06月17日 15:38
  • 1901

switch-case选择结构

今天重新学习了switch-case选择结构,对switch-case有了新的认识, 1、switch-case 语句结构: switch(表达式){ case 值1 : 语句体1; bre...
  • qq_34536908
  • qq_34536908
  • 2017年07月13日 20:26
  • 123

使用函数指针和多态代替冗长的if-else或者switch-case

在编程中,if-else和switch-case是很常见的分支结构,很少在程序中不用这些控制语句。但是不能否认,在一些场景下,由于分支结构过分长,导致代码不美观且不容易维护,在《重构》一书中,也将过长...
  • naked_boy
  • naked_boy
  • 2016年11月20日 20:52
  • 274

switch-case语句

#include int main() { printf("输入成绩(0-100)"); int grade; scanf("%d", &grade); grade /=10; ...
  • daiguoxiang1228
  • daiguoxiang1228
  • 2015年04月21日 21:46
  • 186
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:switch-case
举报原因:
原因补充:

(最多只允许输入30个字)