私は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();
};
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 }
};
のボイド機能の長いリストがプライベートメンバーにアクセスし、適切cppのファイルに問題がある
で定義されていますMARIEinstructionマップを初期化するときに、それらの関数にアクセスできないというエラーが表示されます。私はそれがプライベートであることを知っています。私は単に公開するだけで解決できます。
これを行う方法はありますか?これらはすべて非公開ですか? 私はこれを行うことを他に推奨する方法はありますか?
マップに「const」というラベルを付けることもできます。おそらく変更したくないでしょう。 – OmnipotentEntity
ありがとう、それは助けられましたが、今私はそれがconstであることでこれをやりますか? –