C ++在不同类中的回调

时间:2015-06-25 14:49:55

标签: c++

这是我的问题, 我有两个类,MainMenuState和MainMenuUI。 MainMenuState有一个MainMenuUI成员。 基本上,我想在MainMenuUI中进行所有GUI初始化

void GameUI::MainMenuUI::initUi()
{
    std::shared_ptr<GUI::Label> testLabel2(new GUI::Label);
    testLabel2->setFont(m_font);
    testLabel2->setText("TestLabel");
    testLabel2->setFontColor(sf::Color(0, 0, 0));
    testLabel2->setFontSize(16);
    testLabel2->setRelativePosition(GUI::Position::RIGHT, GUI::Position::BOTTOM, -5, -5);
    addComponent("label2", testLabel2);



    std::shared_ptr<GUI::MainMenuPanel> mainMenu(new GUI::MainMenuPanel(font));
    mainMenu->setRelativePosition(GUI::Position::MIDDLE, GUI::Position::MIDDLE);
    mainMenu->open();
// Problem !---------------
    /*mainMenu->setPlayButtonCallback([this]{
        requestStackPop(); // This method belongs to MainMenuState's base class and is protected
        requestStackPush(States::AnotherState); // This method belongs to MainMenuState's base class and is protected
    });
    mainMenu->setExitButtonCallback([this]{
        requestStackPop(); // This method belongs to MainMenuState's base class and is protected
    });*/
//--------------------
    addComponent("mainMenu", mainMenu);
}

正如您所看到的,问题是“如何直接在我的MainMenuUI类中设置回调?”。朋友课可以帮助我吗?

谢谢

1 个答案:

答案 0 :(得分:1)

如果您不想将这些方法暴露给世界,您可以创建一个可以访问这些方法的类并提供此类接口并将该类的实例作为参数传递给回调:

mainMenu->setPlayButtonCallback([this](Accessor acc){
        acc.requestStackPop(); 
        acc.requestStackPush(States::AnotherState); 
    });