具有0或1参数的struct中的C ++函数指针

时间:2018-07-18 22:17:26

标签: c++ function-pointers

我在这里声明一个结构,并且在我的课堂上有一个数组。

struct instruction {
    std::string disassembly;
    unsigned char operandLength;
    void* execute;
};

...

class CPU {
private:
    struct instruction opcodes[256];

    void load_n_to_b(unsigned char arg1); //0x06
    void load_c_to_b(); //0x41 

...

}

我尝试初始化操作码数组,但始终收到有关“指令的初始化程序太多”或类型从“ void(*)(unsigned char)”类型转换为“ void *”的类型无效的错误。因为这些函数可以有0个参数或1个参数,所以我不知道如何使其在C ++中工作。

我正在像下面这样初始化它们

opcodes[0x06] = instruction{ "LD B, 0x%02X", 1, load_n_to_b };
opcodes[0x41] = instruction{ "LD B, C", 0, load_c_to_b };

1 个答案:

答案 0 :(得分:0)

您在void结构中持有指向instruction的指针。相反,您需要函数指针。

void (*execute)() ;

它适用于load_c_to_b,因为它的参数也是void。但是,我更喜欢void (*execute)(void*),因为如果我需要一个参数,可以通过强制转换使用它,否则,请忽略它。