lambda函数
//定义最简单的lambda函数
[](int i, int j)->int{ return i+j;};
//捕获 变量k 是匿名函数所处定义域的变量可以通过捕获的方式传入匿名函数中
[k](int i, int j)->int{ return i+j+k;}; //值捕获
[&k](int i, int j)->int{ return i+j+k;}; //引用捕获
[=](int i, int j)->int{ return i+j+k;}; //由编译器自动推断值捕获
[&](int i, int j)->int{ return i+j+k;}; //由编译器自动推断引用捕获
函数做为参数
函数对象
//将函数参数声明为 std::function包装的类型
int add_f(int i, int j, std::function<int(int, int)> f)
{
return f(i, j);
}
int add(int i, int j)
{
return i + j;
}
int main(int argc, char* argv[])
{
int k = add_f(2, 3, add);
//int k = add_f(2, 3, [](int i, int j)->int { return i + j; });
cout << k;
system("pause");
return 0;
}
函数指针
函数绑定
class MyPair {
public:
double a, b;
double multiply(int i) { return i*b; }
};
int main(int argc, char* argv[])
{
MyPair ten_two{2,10};
//绑定类成员函数,制定把multiply函数第一个参数制定成ten_two的地址因为成员函数第一个参数是this指针,placeholder::_1指函数的第一个参数
auto f = std::bind(&MyPair::multiply, &ten_two, std::placeholders::_1);
std::cout<<f(2); //输出20
system("pause");
return 0;
}