c++ - 如何根据变量的值运行不同的函数?

标签 c++ function variables

如何在不使用大量 ifswitch 语句的情况下根据变量值运行函数?

目前我正在重复很多代码并做这样的事情

这 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/

相关文章:

c - 为什么我们不能使用类型名称来定义函数?

r - 将权重传递给函数内的 lm 和其他人

ruby - 如何清除 ruby​​ 中 rspec 测试之间的类变量

java - 如何访问类范围外但在父类范围内的变量?

python - 196 算法,函数中有可选输入

c++ - 如何在 C++ 中使用字符串变量作为路径 url

c++ - 创建没有 (OpenSSL) 依赖项的静态库

c++ - 为什么一个 C++ MFC "empty"项目占用 142MB 而一个 6MB 的可执行文件? ( Visual Studio 2010)

c++ - 更改项目中变量名称的最安全方法

c++ - 在 C++ 中移动 unique_ptr