C++_函数指针/回调函数/std::function/std::bind

类成员函数指针 指向类中的非静态成员函数

#include <iostream>
#include <functional>
#include<algorithm>
#include <vector>
using namespace std;
//函数指针指向一个类成员函数
class A
{
public:
	A(int aa = 0) :a(aa) {}
	~A() {};
	void SetA(int aa = 1)
	{
		a = aa;
		cout << "SetA" << endl;
	}
private:
	int a;
};

int main()
{
	void (A::*ptr)(int) = &A::SetA;
	A a;
    //对于指向类成员函数的函数指针,引用时必须传入一个类对象的this指针,所以必须由类实体调用 A* pa = &a; (pa->*ptr)(100); }

  

回调函数:函数指针作为参数传递

typedef void(*MPrint)(int a, int b);


void Prints(int a,int b,const MPrint&func)
{
    cout << a << b << endl;
    func(a, b);
}
void PrintSum(int a,int b)
{
    cout << (a + b) << endl;
}
int main()
{
    int a = 3;
    int b = 9;
    Prints(a,b, PrintSum);
}

如何回调一个类成员函数?

函数指针无法指向类成员函数

使用std::bind 与std::function 结合的方式

class A
{
public:
    A(int aa = 0) :a(aa) {}
    ~A() {};
    void SetA(int aa = 1)
    {
        a = aa;
        cout << "SetA" << endl;
    }
    void PrintSub(int c)
    {
        cout << (a - c) << endl;
    }
private:
    int a;
};
void Test(int c, std::function<void(int)>func)
{
    cout << c << endl;
    func(c);
}
int main()
{
    A a(9);
    std::function<void(int)>f1 = std::bind(&A::PrintSub, &a, std::placeholders::_1);
    Test(5,f1);
}

 

posted on 2022-10-25 00:32  Animer  阅读(131)  评论(0编辑  收藏  举报