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; }
浙公网安备 33010602011771号