C++虚函数和函数指针一起使用
C++虚函数和函数指针一起使用,写起来有点麻烦。
下面贴出一份示例代码,可作参考。(需要支持C++11编译)
1 #include <stdio.h> 2 #include <list> 3 using namespace std; 4 5 class VirtualWithCallBack { 6 public: 7 using CallBack = void(VirtualWithCallBack::*)(int); 8 9 public: 10 virtual void testCallBack(int arg) = 0; 11 12 virtual CallBack getCallBack() const = 0; 13 }; 14 15 class VirtualWithCallBackSample1 : public VirtualWithCallBack { 16 public: 17 VirtualWithCallBackSample1() { 18 callBack = &VirtualWithCallBack::testCallBack; 19 } 20 21 public: 22 void testCallBack(int arg) override { 23 printf("This is virtual call 1 : arg = %d\n", arg); 24 } 25 26 CallBack getCallBack() const override { 27 return callBack; 28 } 29 30 private: 31 CallBack callBack = nullptr; 32 }; 33 34 class VirtualWithCallBackSample2 : public VirtualWithCallBack { 35 public: 36 VirtualWithCallBackSample2() { 37 callBack = &VirtualWithCallBack::testCallBack; 38 } 39 40 public: 41 void testCallBack(int arg) override { 42 printf("This is virtual call 2 : arg = %d\n", arg); 43 } 44 45 CallBack getCallBack() const override { 46 return callBack; 47 } 48 49 private: 50 CallBack callBack = nullptr; 51 }; 52 53 class VirtualCaller { 54 public: 55 void push(VirtualWithCallBack* callBack) { 56 callBackList.push_back(callBack); 57 } 58 59 void run() { 60 for (auto r : callBackList) { 61 (r->*(r->getCallBack()))(99); 62 } 63 } 64 65 private: 66 list<VirtualWithCallBack*> callBackList; 67 }; 68 69 int main() { 70 VirtualCaller caller; 71 caller.push(new VirtualWithCallBackSample1()); 72 caller.push(new VirtualWithCallBackSample2()); 73 caller.run(); 74 return 0; 75 }
运行结果
本文由 哈萨雅琪 原创,转载请注明出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异