学不会的 吸佳佳 -- std::function

luckyFang 2020年10月19日 239次浏览

什么是 std::function

std::function是一个函数包装器模板
该函数包装器模板能包装任何类型的可调用元素

  • 需要引入头文件#include <functional>

简单使用

#include <iostream>
#include <vector>
#include <functional>

double MultBy2(double num) {
    return num * 2;
}


double Domath(std::function<double(double)> func,
              double num) {
    return func(num);
}


int main() {
    // 定义模板
    std::function<double(double)> func;
    // 容器
    std::vector<std::function<double(double)>> vec;

    // 直接调用
    auto mut2 = MultBy2;
    std::cout << "3 * 2 =" <<
              mut2(3) << std::endl;

    // lambda表达式
    std::cout << "4 * 2 =" <<
              Domath([](double e) -> double {
                  return e * 2;
              }, 4) << std::endl;

    std::cout << "4 ^ 2 =" <<
              Domath([](double e) -> double {
                  return e * e;
              }, 4) << std::endl;
    func = ([](double e) -> double {
        return e * 2;
    });
    vec.push_back(func);

    func = ([](double e) -> double {
        return e * 3;
    });
    vec.push_back(func);
    vec.push_back([](double e)->double {
        return  e*e*e;
    });

    std::cout << "10 * 2 =" <<
              vec[0](10) << std::endl;
    std::cout << "10 * 3 =" <<
              vec[1](10) << std::endl;

    std::cout << "10 ^ 3 =" <<
              vec[2](10) << std::endl;

    return 0;
}

3 * 2 =6
4 * 2 =8
4 ^ 2 =16
10 * 2 =20
10 * 3 =30
10 ^ 3 =1000