std::function

std::function 是 C++11 中的一个函数对象封装类,它可以用来保存任意可调用对象(函数指针、函数对象、成员函数指针等),并且可以在需要的时候调用这些可调用对象。下面是一个简单的示例来演示如何使用 std::function

#include <iostream>
#include <functional>

void sayHello() {
    std::cout << "Hello, world!" << std::endl;
}

int add(int a, int b) {
    return a + b;
}

class Multiplier {
public:
    int operator()(int a, int b) {
        return a * b;
    }
};

int main() {
    // 使用函数指针
    std::function<void()> func1 = sayHello;
    func1();

    // 使用lambda表达式
    std::function<int(int, int)> func2 = [](int a, int b) { return a * b; };
    std::cout << "3 * 4 = " << func2(3, 4) << std::endl;

    // 使用普通函数
    std::function<int(int, int)> func3 = add;
    std::cout << "5 + 6 = " << func3(5, 6) << std::endl;

    // 使用函数对象
    Multiplier multiplier;
    std::function<int(int, int)> func4 = multiplier;
    std::cout << "7 * 8 = " << func4(7, 8) << std::endl;

    // bind
    std::function<int(int)> func5 = bind(add, 1, std::placeholders::_1);
    func5(2);        //表示add的第一个参数是1, 第二个参数是func5输入的第一个参数。对于事先不绑定(placeholders)的通过引用传递,对于事先绑定的通过值传递

    return 0;
}

在这个示例中,我们使用了不同的可调用对象(函数指针、lambda表达式、普通函数、函数对象)来初始化 std::function 对象,并且调用了这些 std::function 对象来执行相应的操作。

希望这个示例能够帮助你理解如何使用 std::function

Table of Contents