C++ 仿函数

发布于:2025-08-09 ⋅ 阅读:(17) ⋅ 点赞:(0)


一、仿函数的运用

使用仿函数时需要引入头文件
#include functional

普通函数

int Func01(int a, int b)
{
	return a + b;
}
	std::function<int(int, int)> Func1 = Func01;
	int ret = Func1(1, 2);
	cout << ret << endl;

Lambda

auto la = [](int a, int b)->int
	{
		return a + b;
	};
	std::function<int(int, int)> Func2 = la;
	int ret2 = Func2(1, 2);
	cout << ret2 << endl;

函数指针

int(*Ptr)(int, int);
	Ptr = Func01;
	std::function<int(int, int)> Func3 = Ptr;
	int ret3 = Func3(1, 2);
	cout << ret3 << endl;

成员函数

class FTestClass
{
public:
	int Func04(int a, int b)
	{
		return a + b;
	}
};
	FTestClass Tc;
	std::function<int(int, int)> Func4 = bind(&FTestClass::Func04, &Tc, placeholders::_1, placeholders::_2);
	int ret4 = Func4(1, 2);
	cout << ret4 << endl;

使用类重写括号

class FTestClass02
{
public:
	int operator()(int a, int b)
	{
		return a + b;
	}
};
	std::function<int(int, int)> Func5 = FTestClass02();
	int ret5 = Func5(1, 2);
	cout << ret5 << endl;

静态函数

class FTestClass03
{
public:
	static int Func06(int a, int b)
	{
		return a + b;
	}
};
	std::function<int(int, int)> Func6 = FTestClass03::Func06;
	int ret6 = Func6(1, 2);
	cout << ret6 << endl;

模板函数

template<typename T>
T Func07(T a, T b)
{
	return a + b;
}
	std::function<int(int, int)> Func7 = Func07<int>;
	int ret7 = Func7(1, 2);
	cout << ret7 << endl;

实际使用案例

void CallBack(std::function<int(int, int)> func)
{
	cout << "Hello" << endl;
	cout << func(1, 2) << endl;
	cout << "world" << endl;
}
	CallBack([](int a, int b)->int
		{
			return a + b;
		});

二、Bind

int Func01(int a, int b)
{
	return a + b;
}

template<typename T>
T Func02(T t1, T t2)
{
	return t1 + t2;
}

class FTestClass
{
public:
	int Func03(int a, int b)
	{
		return a + b;
	}
};

1.延时

	auto F1 = std::bind(Func01, 1, 2);
	std::cout << F1(3, 4) << std::endl;

2.占位

	auto F2 = std::bind(Func01, std::placeholders::_1,std::placeholders::_2);
	std::cout << F2(3, 4) << std::endl;

3.模板函数绑定

	auto F3 = std::bind(Func02<int>, 1, 2);
	std::cout << F3() << std::endl;

4.类的成员函数

	FTestClass tc;
	auto F4 = std::bind(&FTestClass::Func03,&tc, 1, 2);
	std::cout << F4() << std::endl;

网站公告

今日签到

点亮在社区的每一天
去签到