[英]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.