在构造类之外定义函数实例

Posted

技术标签:

【中文标题】在构造类之外定义函数实例【英文标题】: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

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于在构造类之外定义函数实例的主要内容,如果未能解决你的问题,请参考以下文章

C++:如何在结构中定义类实例。类具有参数化构造函数[重复]

类(对象)的定义 自定义对象构造函数

内部类中的私有构造函数在外部类中初始化

子类的实例化过程

为啥我们需要私有构造函数?

2016/3/21 面向对象: ①定义类 ②实例化对象 ③$this关键字 ④构造函数 ⑤析构函数 ⑥封装 ⑦继承