Использование карты указателей на функции-члены

Ранее я публиковал аналогичный вопрос, просто теперь проблема в другом месте.

Я пытаюсь создать симулятор кода 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 является строкой

0 ответов

Другие вопросы по тегам