【问题标题】:Define function instance outside constructed class在构造类之外定义函数实例
【发布时间】:2021-01-04 16:33:59
【问题描述】:

我正在使用 Arduino IDE,并且正在尝试制作可执行命令。我有一个名为 command 的类:

class Command {
    Command();
  public:
    void eval();
  private:
};

Command::Command() {}

我想做这样的事情:

class Command {               // Create the command class
    Command();
  public:
    void eval();
  private:
};

Command::Command() {}        // Constructor

Command commandOne();           // Construct an instance of the class

void commandOne.eval() = () => {}     // Change eval function in class

【问题讨论】:

    标签: c++ function class arduino


    【解决方案1】:

    您可以将std::function 保留为您班级的私人成员,并提供一个设置器来更改它。然后实现你的eval 来调用这个函数。最小的例子:

    class Command
    {
    public:
      // note that constructor must be public
      Command(): _f() {}
      void eval()
      {
        if (_f)
        {
          _f();
        }
      }
      void setEval(std::function<void()> f)
      {
        _f = f;
      }
    private:
      std::function<void()> _f;
    };
    
    int main()
    {
      Command cmd;
      cmd.eval();
      cmd.setEval([]() { std::cout << "Hello!" << std::endl; });
      cmd.eval();
      return 0;
    }
    

    如果你不想要setter并且在构造Command对象之前知道你的函数体,你可以删除默认构造函数,移除setter函数,然后实现Command::Command(std::function&lt;void()&gt; f): _f(f) {}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 2021-04-28
      • 2022-11-04
      • 2015-07-03
      • 1970-01-01
      • 2016-09-28
      相关资源
      最近更新 更多