2017-03-29 71 views
1

我试图制作一个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 } 
}; 

的void函数的一长串访问私有成员和cpp文件

的问题是正确定义当初始化MARIEinstruction地图时,我得到一个错误,说这些函数不可访问。我知道这是因为他们是私人的,我可以通过公开他们来解决这个问题。

有没有一种方法可以做到这一点,并将这些全部视为私密? 也有任何其他方式,你推荐我这样做?

回答

1

不用担心,您可以从静态类成员的初始化程序中命名私有成员,就像从成员函数的定义中一样。

这里的麻烦在于你没有定义静态类成员。您正在定义名为MARIEinstruction的无关全局对象。要定义类成员,您必须使用类成员访问语法MARIEapp::MARIEinstruction。此外,不要在定义上放置static关键字,只需在声明上。

std::map<char, MARIEapp::Instruction> MARIEapp::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 } 
}; 
+0

您还想标注地图'const'您可能不想更改它。 – OmnipotentEntity

+0

谢谢,这有帮助,但现在我怎么会这样做它是一个常量? –

相关问题