C++11的function类模版怎么使用

发布时间:2021-11-26 13:46:36 作者:iii
来源:亿速云 阅读:154

C++11的function类模板怎么使用

C++11引入了std::function类模板,它是一个通用的函数包装器,可以用来存储、复制和调用任何可调用对象(如函数、lambda表达式、函数对象等)。std::function提供了一种类型安全的方式来处理不同类型的可调用对象,使得代码更加灵活和可维护。

基本用法

std::function的基本用法非常简单。首先,你需要包含头文件<functional>,然后声明一个std::function对象,指定其返回类型和参数类型。例如:

#include <iostream>
#include <functional>

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

int main() {
    std::function<int(int, int)> func = add;
    std::cout << "Result: " << func(2, 3) << std::endl;
    return 0;
}

在这个例子中,std::function<int(int, int)>表示一个返回int类型并接受两个int类型参数的函数。我们将add函数赋值给func,然后通过func调用add函数。

存储不同类型的可调用对象

std::function不仅可以存储普通函数,还可以存储lambda表达式、函数对象等。例如:

#include <iostream>
#include <functional>

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

int main() {
    std::function<int(int, int)> func;

    // 存储普通函数
    func = [](int a, int b) { return a + b; };
    std::cout << "Addition: " << func(2, 3) << std::endl;

    // 存储函数对象
    func = Multiply();
    std::cout << "Multiplication: " << func(2, 3) << std::endl;

    return 0;
}

在这个例子中,我们首先将lambda表达式赋值给func,然后又将Multiply类的实例赋值给funcstd::function可以灵活地存储不同类型的可调用对象。

检查是否为空

在使用std::function时,有时需要检查它是否已经绑定了一个可调用对象。可以通过operator bool来检查:

#include <iostream>
#include <functional>

int main() {
    std::function<int(int, int)> func;

    if (!func) {
        std::cout << "func is empty" << std::endl;
    }

    func = [](int a, int b) { return a + b; };

    if (func) {
        std::cout << "func is not empty" << std::endl;
    }

    return 0;
}

总结

std::function是C++11中一个非常强大的工具,它提供了一种统一的方式来处理不同类型的可调用对象。通过std::function,你可以将函数、lambda表达式、函数对象等存储在一个变量中,并在需要时调用它们。这使得代码更加灵活和可维护,特别是在需要传递回调函数或实现策略模式时,std::function显得尤为有用。

推荐阅读:
  1. wordpress 分类使用不同的模版
  2. 如何使用vue模版组件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++ function

上一篇:C++中为什么不要分割处理对象

下一篇:C#如何实现基于Socket套接字的网络通信封装

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》