C++将同一个类中两个不同名称参数类型相同的函数抽象成一个类型
std::fun 抽象
#include <iostream> #include <functional> class MyClass { public: void func1(int x) { std::cout << "func1: " << x << std::endl; } void func2(int x) { std::cout << "func2: " << x << std::endl; } }; void callFunction(MyClass& obj, std::function<void(int)> func, int x) { func(x); } int main() { MyClass obj; callFunction(obj, std::bind(&MyClass::func1, &obj, std::placeholders::_1), 10); // 调用 func1 callFunction(obj, std::bind(&MyClass::func2, &obj, std::placeholders::_1), 20); // 调用 func2 return 0; }
模版:
#include <iostream> class MyClass { public: void func1(int x) { std::cout << "func1: " << x << std::endl; } void func2(int x) { std::cout << "func2: " << x << std::endl; } }; template <typename Func> void callFunction(MyClass& obj, Func func, int x) { (obj.*func)(x); } int main() { MyClass obj; callFunction(obj, &MyClass::func1, 10); // 调用 func1 callFunction(obj, &MyClass::func2, 20); // 调用 func2 return 0; }
using 函数指针
using FuncPtr = void (MyClass::*)(int); void callFunction(MyClass& obj, FuncPtr func, int x) { (obj.*func)(x); } int main() { MyClass obj; callFunction(obj, &MyClass::func1, 10); // 调用 func1 callFunction(obj, &MyClass::func2, 20); // 调用 func2 return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统