c语言编程笔录

首页 >   > 笔记大全

笔记大全

C++11中的stdfunction怎么使用

更新时间:2023-12-20

前言

在C++11中引入了std::function,它是一个通用的函数封装类,可以用来包装可调用对象,包括函数指针、成员函数指针、lambda表达式等。std::function使得函数能够像普通对象一样进行传递、保存和调用,非常灵活和方便。

使用std::function的基本步骤

使用std::function需要经过以下几个步骤:
1. 定义std::function对象,指定其参数列表和返回类型;
2. 将可调用对象(函数指针、成员函数指针、lambda表达式等)赋值给std::function对象;
3. 调用std::function对象。

示例代码

下面是一个使用std::function的简单示例代码,用来演示基本的使用方法:
#include 
#include 

void func(int n) {
    std::cout << "Hello from func: " << n << std::endl;
}

class MyClass {
public:
    void memFunc(int n) {
        std::cout << "Hello from memFunc: " << n << std::endl;
    }
};

int main() {
    // 定义std::function对象并赋值为普通函数
    std::function f1 = func;
    // 调用std::function对象
    f1(123);

    // 定义std::function对象并赋值为成员函数
    MyClass obj;
    std::function f2 = std::bind(&MyClass::memFunc, &obj, std::placeholders::_1);
    // 调用std::function对象
    f2(456);

    // 定义std::function对象并赋值为lambda表达式
    std::function f3 = [](int n) {
        std::cout << "Hello from lambda: " << n << std::endl;
    };
    // 调用std::function对象
    f3(789);

    return 0;
}
在上面的示例代码中,我们首先定义了一个普通函数func和一个成员函数memFunc。然后使用std::function对象f1来包装func函数,通过f1(123)调用func函数。接着使用std::function对象f2来包装memFunc成员函数,通过f2(456)调用memFunc函数。最后使用std::function对象f3来包装lambda表达式,通过f3(789)调用lambda函数。

总结

std::function是一个非常强大和灵活的功能,它使得函数可以像普通对象一样进行传递和调用。无论是普通函数、成员函数还是lambda表达式,都可以用std::function进行包装。通过使用std::function,我们可以实现回调机制、函数指针的封装等应用场景。同时,std::function也提供了一种方便的方式来实现函数的延迟调用、函数的动态替换等功能。总之,std::function为C++语言增加了更多的灵活性和可扩展性。