【问题标题】:How to create a Button class that swells on other class object如何创建一个在其他类对象上膨胀的 Button 类
【发布时间】:2022-06-10 19:10:01
【问题描述】:

我正在 cpp 中创建一个小游戏,但我的 Button 类有问题:

class ids::Button : public ids::ASpriteObject {
public:
    Button(std::vector<float> pos, std::string texture, int frame, std::function<void(Button&)> ptr, gameState &state);
    ~Button();
    std::string getType();
    void checkCollisions();
    void drawAsset(std::map<std::string, ModelS> modelMap);
    void launchGame();
    void settings();
    void exit();
    void mainMenu();
    void increaseSound();
    void decreaseSound();
    void increaseFPS();
    void decreaseFPS();

protected:
private:
    std::function<void(Button&)> _function;
    gameState &_gameState;

};

如您所见,Button 在其构造函数中采用 std::function。多亏了它,我为按钮分配了单击时将执行的功能。

这是我的问题:使用我的按钮,我想修改其他类对象,例如 Text 类:

class Text : public ids::AStaticObject {
public:
    Text(std::vector<float> pos, std::string text, float size);
    ~Text();
    void drawAsset(std::map<std::string, ModelS> modelMap);

protected:
private:
    Font _font;
    std::string _text;
    Vector2 _pos;
    float _size;

};

点击后,我想修改_text。 我可以将我的 Text 对象的引用传递给我的 Button,但这并不聪明,最终我应该用我的按钮修改其他对象...

感谢您的帮助!

【问题讨论】:

  • 问题是什么?您知道std::function 可以为您保存对Text 对象的引用吗?
  • 嗨!我不知道,std::function 可以引用一个方法,但是一个对象?那是什么语法?感谢您的帮助!
  • 我可以模板化这个对象,因为按钮不一定需要文本?
  • 我真的不明白你的意思,也许你想要std::bind

标签: c++ class reference hierarchy


【解决方案1】:

给定对Text textObj 的引用,您可以创建一个回调来保留对textObj 的引用,如下所示:

auto callback = [&textObj](Button& b) {
  textObj.setText("hi there");
};

auto buttonPtr = new Button(pos, texture, frame, callback, state);
// or assign it to an object instance variable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多