Я пытаюсь создать симулятор кода MARIE, или как бы вы его ни называли, и я пытаюсь избежать длинного случая переключения для доступа к некоторым частным функциям в классе.
МАРИприл.ч:
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();
};
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 обращается к закрытым членам и правильно определен в файле cpp.
Проблема в том, что при инициализации карты инструкций MARIE я получаю сообщение об ошибке, в котором говорится, что эти функции недоступны. Я знаю, это потому, что они частные, и я могу исправить это, просто сделав их общедоступными.
Есть ли способ сделать это и оставить все как личное? Также есть ли другие способы, которыми вы рекомендуете мне это сделать?