如何在不使用大量 if
或 switch
语句的情况下根据变量值运行函数?
目前我正在重复很多代码并做这样的事情
这 2 个变量代表我从套接字读取的数据。 我需要根据收到的数据做一些不同的事情
//Class1.h
class Class1 {
public:
Class1();
virtual ~Class1();
unsigned char mode = 0x00;
unsigned char type = 0x00;
Interface* o;//in this case I’m creating an object not running a function
};
//Class1.cpp
#include "Class1.h"
Class1::Class1(){
switch(mode){
case 0x00:
switch(type){
case 0x00:
o = new Class2();
break;
case 0x01:
o = new Class3();
break;
case 0x02:
o = new Class4();
break;
}
//case 0x03
//case 0x04
//...
break;
//case 0x01
//case 0x02
//...
default:
break;
}
}
最佳答案
没有真正干净的解决方案,但如果您确实有名为“Class%d”的类,则可以利用预处理器通过将变量的值用作类名的一部分来缩短代码。
我不太喜欢这个,但我想不出太多替代方案。
#define HANDLE_HUNDREDS_OF_CASES(x) case x: o = new Class##x(); break;
int type=1;
switch(type) {
HANDLE_HUNDREDS_OF_CASES(0); //< Will construct a new Class0 if type==0
HANDLE_HUNDREDS_OF_CASES(1); //< Will construct a new Class1 if type==1
HANDLE_HUNDREDS_OF_CASES(2); // Etc ...
HANDLE_HUNDREDS_OF_CASES(5);
HANDLE_HUNDREDS_OF_CASES(100);
default:
break;
}
如果您只想调用函数而不是构造函数,您可以创建一个函数指针数组并将变量用作该数组的索引。
关于c++ - 如何根据变量的值运行不同的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27831568/