C++:像在 Java 中一样将接口作为参数传递

C++: Pass interface as parameter like in Java

本文关键字:一样 接口 参数传递 像在 Java C++      更新时间:2023-10-16

我想用C++做一些可以用Java做的事情。这是我的Java代码:

interface Worker
{
    public void work();
}
class Employer
{
    public void askForWork(Worker worker)
    {
        worker.work();
    }
}
public class Main
{
    public static void main(String[] args)
    {
        Employer employer = new Employer();
        employer.askForWork(new Worker()
        {
            @Override
            public void work()
            {
                System.out.println("I'm working!");
            }
        });
        employer.askForWork(new Worker()
        {
            @Override
            public void work()
            {
                System.out.println("I'm working too!");
            }
        });
    }
}

我想在C++做到。对我来说,能够在函数调用中实现接口非常重要。可能吗?

一种方法是使用 std::function。

class Worker {
 public:
  explicit Worker(std::function<void()> task)
      : task_(task) {}
  void Work() {
    task_();
  }
 private:
  std::function<void()> task_;
};
class Employer {
  ...
  void AskForWork(std::unique_ptr<Worker> worker) {
    worker->Work();
  }
};
int main(...) {
  Employer employer;
  employer.AskForWork(new Worker(
    []() {
      std::cout << "I'm working!" << std::endl;
    }
  ));
}