【问题标题】:Redefine Method In Class C++在 C++ 类中重新定义方法
【发布时间】:2019-02-16 13:25:11
【问题描述】:

我一直在尝试用 C++ 为我的新游戏创建按钮,并为它们创建了一个保存数据的类。我需要能够为每个按钮单击类分配一个方法。例如,假设我有十个按钮,我需要每个按钮在单击时输出不同的单词。

class button{
    float position;


    float scale;

    void on_click();
};

button new_button;
new_button.on_click = {
    std::cout << "HELLO" << std::endl;
}

我怎样才能让这样的事情发挥作用? 感谢您的任何回复。

【问题讨论】:

  • 文字就是数据。对象携带数据。同一类的不同对象可能携带不同的数据。您无需为每条数据创建单独的方法。
  • 正确的解决方案是将字符串存储为数据并输出。您问题的直接答案是使用std::function
  • 在任何平台上,您都可以找到创建窗口框架以及事件/信号/回调管理的原生 api。你用的是什么平台?如果您想从头开始构建,请告诉我们。

标签: c++ class methods


【解决方案1】:

按字面意思回答您的问题来修复您的代码将使用std::function 成员,如

#include <functional>
#include <iostream>

struct button { 
    using callback = std::function<void()>;    
    callback on_click;
    button(callback f) : on_click(f) {};    
    void click() { on_click(); }
};

int main() {
    button b1{[](){ std::cout << "b1\n"; }};
    b1.click();
}

但是,如果唯一的区别是要打印的文本,您只需使用按钮存储要打印的字符串

#include <string>
#include <iostream>

struct button { 
    std::string message;
    button(std::string s) : message(s) {};    
    void click() { std::cout << message; }
};

int main() {
    button b1{"b1\n"};
    b1.click();
}

【讨论】:

    猜你喜欢
    • 2019-07-22
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    相关资源
    最近更新 更多