[英]How to assign functions to a function pointer?
我正在编写一个 Gameboy 模拟器,对于 CPU 的指令,我在这里(在 cpp.hpp 中)使用这个结构来存储有关它们的信息。 该映射用于通过等于其个人操作码的密钥访问所有这些信息:
struct instruction {
std::string name; //name of the instruction
int cycles; //clock cycles required to be executed
int paramNum; //number of params accepted
void* function; //code to be executed
};
class Cpu {
private:
std::map<unsigned char, instruction> instrMap;
void Cpu::fillInstructions(void);
instruction addInstruction(std::string, int, int, void*);
public:
void add_A_n(unsigned char);
}
然后在 cpu.cpp 中,例如我想转换为函数指针的函数之一,以便分配给结构指令的字段。 所以我有这个代码:
void Cpu::add_A_n(unsigned char n) {
//body
}
void Cpu::addInstructions(std::string name, int cycles, int paramNum, void* function) {
instruction i = {name, cycles, paramNum, function};
return i;
}
void Cpu::fillInstructions() {
instrMap[0x80] = Cpu::addInstruction("ADD A, n", 4, 0, (void*)&Cpu::add_A_n);
}
目标是从内存中获取操作码,然后使用该操作码从映射中检索有关相关指令的信息,最后通过使用 switch case 选择正确的来执行其功能:
((void (*)(void))instrMap[0x80].function)(); //for 0 params
((void (*)(unsigned char))instrMap[0x90].function)((unsigned char)operand); //for 1 param
我的目标是将所有函数,甚至是那些需要一些参数的函数,转换为结构体中的函数。
它正确执行了相应的功能,但会引发警告:
警告:从“void (Cpu:: )()”转换为“void ”[-Wpmf-conversions] instrMap[0x80] = Cpu::addInstruction("ADD A, n", 4, 0, (void*)&Cpu ::add_A_n);
我该如何解决它以及它为什么会发生? 谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.