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;
}

 

posted on 2025-02-08 14:15  邗影  阅读(18)  评论(0)    收藏  举报

导航