C++ function 关键字解析

一、应用功能

用于表示函数对象的模板,函数的返回值、参数类型一致,则可以采用同一种模板形式调用

二、头文件

#include

三、使用示例

1、普通函数和 lanmbda 表达式的模板调用

#include 
#include 

int teAdd(int ia, int ib)
{
	return (ia + ib);
}

auto teM = [](int a, int b)
{
	return a / b;
};


int main()
{
	std::function func1 = teAdd;
	std::function func2 = teM;

	std::cout << func1(2, 2) << std::endl;
	std::cout << func2(2, 2) << std::endl;
}

输出 4,1

2、类成员函数的模板调用

#include 
#include 

class TeFunc
{
public:
	TeFunc():m_int(0) { NULL; }
	~TeFunc() {};

	int operator()(int i)
	{
		m_int += i;
		return m_int;
	}

	int sum() const
	{
		return m_int;
	}

private:
	int m_int;
};



int main()
{
	TeFunc clsFunc;
	std::function func1 = clsFunc;
	std::function func2 = clsFunc;
	std::cout << func1(5) << std::endl;
	std::cout << func2(5) << std::endl;
	std::cout << clsFunc.sum() << std::endl;

	std::function func3 = std::ref(clsFunc);
	std::function func4 = std::ref(clsFunc);
	std::cout << func3(5) << std::endl;
	std::cout << func4(5) << std::endl;
	std::cout << clsFunc.sum() << std::endl;

}

输出 5,5,0,5,10,5

function 的缺省行为是拷贝一份传递给函数对象,所以 func1 和 func2 保存的是 clsFunc 的拷贝,内存是独立的

ref 提供引用的传递

属性一致性原则,两个 function 赋值,如原 function 是拷贝,则目标 function 是拷贝,若原 function 是引用,则目标 function 是引用

四、参考链接

https://blog.csdn.net/wangkai_123456/article/details/76260963

你可能感兴趣的:(C++)