J'essaie de faire un simulateur de code MARIE, ou peu importe comment vous l'appelez, et j'essaie d'éviter un long cas de commutateur pour accéder à certaines fonctions privées dans la classe.Comment initialiser la carte statique des pointeurs de fonction de membre privé?
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();
};
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 }
};
La longue liste des fonctions vides et accéder aux membres privés sont définis correctement dans le fichier cpp
Le problème est que lors de l'initialisation de la carte MARIEinstruction, j'obtiens une erreur indiquant que ces fonctions ne sont pas accessibles. Je sais que c'est parce qu'ils sont privés, et je peux réparer cela en les rendant publics.
Y a-t-il un moyen de le faire et de les laisser tous privés? Y a-t-il d'autres façons de me recommander?
Vous souhaitez également étiqueter la carte 'const' Vous ne voulez probablement pas le changer. – OmnipotentEntity
Merci, ça a aidé, mais maintenant comment est-ce que je le ferais avec un const? –