Использование карты указателей на функции-члены
Ранее я публиковал аналогичный вопрос, просто теперь проблема в другом месте.
Я пытаюсь создать симулятор кода MARIE или как вы его называете, и я пытаюсь избежать длинного случая переключения для доступа к некоторым частным функциям в классе.
MARIEapp.h:
MARIEapp.h{
public:
typedef void (MARIEapp::*Instruction)();
private:
static std::map<char, Instruction> MARIEinstruction;
void JnS();
void Load();
void Store();
void Add();
void Subt();
void Input();
void Output();
void Halt();
void Skipcond();
void Jump();
void Clear();
void AddI();
void JumpI();
void LoadI();
void StoreI();
void Execute();
};
MARIEapp.cpp:
static std::map<char, MARIEapp::Instruction> MARIEinstruction = {
{ '0', &MARIEapp::JnS },
{ '1', &MARIEapp::Load },
{ '2', &MARIEapp::Store },
{ '3', &MARIEapp::Add },
{ '4', &MARIEapp::Subt },
{ '5', &MARIEapp::Input },
{ '6', &MARIEapp::Output },
{ '7', &MARIEapp::Halt },
{ '8', &MARIEapp::Skipcond },
{ '9', &MARIEapp::Jump },
{ 'A', &MARIEapp::Clear },
{ 'B', &MARIEapp::AddI },
{ 'C', &MARIEapp::JumpI },
{ 'D', &MARIEapp::LoadI },
{ 'E', &MARIEapp::StoreI }
};
void MARIEapp::Execute() {
MARIEinstruction[IR[0]]();
if (DebugMode)ShowRegisters();
}
Длинный список функций void имеет доступ к закрытым членам и правильно определен в файле cpp, как и функция ShowRegister().
Теперь проблема в том, что в Execute() я получаю ошибку при доступе к инструкции MARIE, говоря: "выражение, предшествующее круглым скобкам видимого вызова, должно иметь (указатель на) типы функций".
Также есть ли другие способы, которые вы рекомендуете мне сделать это?
РЕДАКТИРОВАТЬ: IR является строкой