c++ std::function

std::function是一个函数包装器,该函数包装器模板能包装任何类型的可调用实体,如普通函数,函数对象,lamda表达式等。包装器可拷贝,移动等,并且包装器类型仅仅依赖于调用特征,而不依赖于可调用元素自身的类型。std::function是C++11的新特性,包含在头文件中。

一个std::function类型对象实例可以包装下列这几种可调用实体:函数、函数指针、成员函数、静态函数、lamda表达式和函数对象。std::function对象实例可被拷贝和移动,并且可以使用指定的调用特征来直接调用目标元素。当std::function对象实例未包含任何实际可调用实体时,调用该std::function对象实例将抛出std::bad_function_call异常。
————————————————
引用链接:https://blog.csdn.net/u011942101/article/details/124232706

1. 封装普通函数

typedef std::function Functional_NormalFunc;
int TestFunc(int var)
{
	return var;
}

完整demo

#include 
using namespace std;
using func_t = std::function;

typedef std::function Functional_NormalFunc;
int TestFunc(size_t var,int var2)
{
	return var + var2;
}

func_t TestFunc1(func_t func)  // 以参数的方式传递 func_t
{
	return func;
}

int main()
{
    // 封装普通函数
    {
		Functional_NormalFunc obj = TestFunc;
		size_t res = obj(1,2);
		std::cout << res << std::endl; //res=3
		res = obj(11,3);      
		std::cout << res << std::endl; //res=14
	}

    // std::function实例做为参数传递
    {
        func_t func = TestFunc;        // 将TestFunc赋值给std::function实例
        func_t func1  = TestFunc1(func); 
        cout<< func1(1,2)<< endl;      //res=3
    }

    return 0;
}

2、其他用法见

  • 2.包装模板函数
  • 3.包装lambda表达式
  • 4. 包装函数对象
      • 非模板类型
      • 模板类型:
  • 5.包装类静态成员函数
      • 非模板类型
      • 模板类型:
  • 6. 包装类对象成员函数
      • 非模板类型:
      • 模板类型:
  • 7. 拷贝、移动

你可能感兴趣的:(c/c++,c++,开发语言)