1、std::function
std::function是一个模板类,其可对C++可调用的对象进行封装,比如,成员函数、静态函数等;它的基本作用是简化调用的复杂程度,归一化调用方式。
std::function<int(int, int)> int_function:声明方式为<返回值类型(参数类型1,参数类型2,...)>,其可封装任何可调用的对象,只需要将可调用的对象作为右值赋值给它:
int add_function(int a, int b)
{
return a+b;
}
std::function<int(int,int)> addFunc = add_function;
std::function怎么与类成员函数建立联系,需要通过std::bind进行建立联系。
2、std::bind
std::bind是一个基于模板的函数,它的作用是绑定并返回一个std::function对象;std::bind是模板函数,std::function是模板类,std::bind返回可直接给std::function,std::function可以包装类成员函数,其无法生成类成员函数可调用的对象,通过std::bind可以生成类成员函数可调用的对象。
std::bind绑定普通函数:std::bind(&函数名,std::placeholders::_1, ...),绑定普通成员函数时,参数1是函数名,后续是函数的参数列表,参数的书写方式是std::placeholders::_1,std::placeholders::_2,...;
std::bind类成员函数:std::bind(&类名::函数名,类对象指针,std::placeholders::_1, ...),绑定类成员函数时,参数1是类成员函数的引用,参数2是类对象指针,后续为函数参数列表。
3、示例程序
#include <iostream> #include "CommonFunctions.h" #include <functional> int add_function(int a, int b) { return a + b; } int bind_add_function(int a, int b) { return a + b; } int main() { std::function<int(int, int)> addFunc = add_function; std::function<int(int, int)> bindAddFunc = std::bind(&bind_add_function, std::placeholders::_1, std::placeholders::_2); std::shared_ptr<CommonFunctions> cf = std::make_shared<CommonFunctions>(); std::function<int(int, int)> classBindAddFunc = std::bind(&CommonFunctions::add_test, cf, std::placeholders::_1, std::placeholders::_2); std::cout <<"addFunc: "<< addFunc(5,6); std::cout << "\r\n"; std::cout <<"bindAddFunc: "<<bindAddFunc(6, 6); std::cout << "\r\n"; std::cout << "classBindAddFunc: " << classBindAddFunc(6, 7); std::cout << "\r\n"; system("pause"); }
std::bind(&funcName, std::placeholders::_1, ...);标签:std,function,函数,int,bind,placeholders From: https://www.cnblogs.com/missyou0813/p/17852119.html