C++:像在 Java 中一样将接口作为参数传递
C++: Pass interface as parameter like in Java
我想用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;
}
));
}
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- Visual C++GC接口如何启用它以及要包含哪个库
- Windows.h与GLFW.h的接口
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 提供与TMP和SFINAE的通用接口
- 为重写std::exception的库生成swig接口时出错
- 内联如何影响模块接口中的成员函数
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- COM 接口 c# 封送数组数组
- 如何在 SCIP C++ 接口中获取 MILP 约束矩阵中的系数值
- 为什么在C++中对链表这样做?(像堆叠一样处理它们)
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 堆栈和队列是否像C++中的数组一样传递?
- 如何绑定 C++ gRPC 客户端的网络接口
- 是否有技术原因阻止 Java 中的 final C++ 像 const 一样严格?
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何从实现接口的模板化类实例访问结构
- 在C++中,我可以像在Java中一样拥有一个接口变量吗
- C++:像在 Java 中一样将接口作为参数传递
- 接口与c++中的java一样