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;
}

results matching ""

    No results matching ""