C++是否支持类似Java的interface接口匿名实现方式?
C++ 实现类似Java匿名接口的方法
C虽然没有内置的interface关键字,但可以通过纯虚基类定义接口,完全可以实现和Java匿名内部类等效的功能,而且还有更简洁的现代C写法。
你给出的Java代码有两种常用的等效C++实现:
1. 和Java逻辑完全对齐的匿名类实现
首先定义等价于Java Runnable的接口(纯虚基类):
#include <iostream> class Runnable { public: virtual void run() = 0; virtual ~Runnable() = default; // 必须加虚析构避免内存泄漏 };
之后就可以用和Java几乎一致的语法做匿名实现:
Runnable* myRunnable = new Runnable() { public: void run() override { std::cout << "Runnable running" << std::endl; } }; // 调用方法 myRunnable->run(); // 用完需要手动释放内存,也可以用std::unique_ptr托管避免手动delete delete myRunnable;
2. 现代C++更推荐的轻量实现
C++11及以上版本可以用lambda+std::function的组合,不需要提前定义接口类,写法更简单性能也更高:
#include <iostream> #include <functional> std::function<void()> myRunnable = []() { std::cout << "Runnable running" << std::endl; }; // 直接调用即可 myRunnable();
注意事项
- 以上两种写法都要求C版本在C11及以上,旧版本标准不支持
- 没有强多态要求的场景优先用lambda写法,没有虚函数开销,代码更轻便
- 用裸指针管理匿名类对象时切记手动释放内存,避免泄漏
内容的提问来源于stack exchange,提问作者T0maas
相关产品推荐
相关产品推荐

