c++11特性 std::function 简单实验

文章介绍了C++11中std::function的作用,它能封装和调用各种Callable对象,如函数、Lambda表达式和函数对象,提升代码的灵活性和可重用性。通过示例展示了如何存储和调用不同类型的可调用对象。

1.概要

std::function 是 C++11 引入的一个通用、多态的函数封装器。它可以存储、复制和调用任何 Callable 目标 —— 函数、Lambda 表达式、bind 表达式或其他函数对象。这使得 std::function 成为一个非常强大的工具,可以用来表示和操作一般的可调用对象。

2.代码

下面是一个简单的 std::function 实验,展示了如何使用它来存储不同类型的可调用对象,并调用它们:

#include <iostream>  
#include <functional> // 包含 std::function 的头文件  
  
// 一个简单的函数  
int add(int a, int b) {  
    return a + b;  
}  
  
// 一个函数对象(也称为仿函数)  
struct Multiply {  
    int operator()(int a, int b) const {  
        return a * b;  
    }  
};  
  
int main() {  
    // 使用 std::function 存储一个普通函数  
    std::function<int(int, int)> func1 = add;  
    int result1 = func1(3, 4); // 调用 func1,相当于调用 add(3, 4)  
    std::cout << "Result 1: " << result1 << std::endl; // 输出: Result 1: 7  
  
    // 使用 std::function 存储一个 Lambda 表达式  
    std::function<int(int, int)> func2 = [](int a, int b) { return a - b; };  
    int result2 = func2(7, 3); // 调用 func2,执行 Lambda 表达式  
    std::cout << "Result 2: " << result2 << std::endl; // 输出: Result 2: 4  
  
    // 使用 std::function 存储一个函数对象  
    std::function<int(int, int)> func3 = Multiply();  
    int result3 = func3(5, 6); // 调用 func3,相当于调用 Multiply()(5, 6)  
    std::cout << "Result 3: " << result3 << std::endl; // 输出: Result 3: 30  
  
    // std::function 也可以接受没有参数的 Callable 对象  
    std::function<void()> func4 = []() { std::cout << "Hello, std::function!" << std::endl; };  
    func4(); // 调用 func4,输出 "Hello, std::function!"  
  
    return 0;  
}

3.运行结果

Result 1: 7
Result 2: 4
Result 3: 30
Hello, std::function!

4.代码说明

在这个例子中,我们定义了三个不同类型的可调用对象:一个普通的函数 add,一个函数对象 Multiply,以及一个 Lambda 表达式。我们创建了三个 std::function 对象 func1、func2 和 func3,分别用于存储这些可调用对象。然后,我们通过调用这些 std::function 对象来执行相应的操作,并打印结果。

5.补充说明

最后,我们还展示了如何使用 std::function 存储一个不接受任何参数的可调用对象(在这种情况下是一个 Lambda 表达式),并通过调用它来执行操作。

std::function 的强大之处在于它的多态性:你可以使用相同的 std::function 对象来存储不同类型的可调用对象,并在需要时调用它们。这使得代码更加灵活和可重用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值