C++标准库中的std::function是一个通用的函数封装,可以用来存储、复制、调用任何可调用对象(函数、函数指针、成员函数指针、lambda表达式等)。以下是std::function的一些常见用法:

定义std::function类型
std::function类型的定义类似于函数指针类型,例如:

std::function<int(int)> func;
表示一个参数为int类型,返回值为int类型的可调用对象。

绑定函数或函数对象
可以将函数或函数对象绑定到std::function对象上,例如:

int add(int a, int b) {
return a + b;
} struct Add {
int operator()(int a, int b) {
return a + b;
}
};
std::function<int(int, int)> f1 = add;
std::function<int(int, int)> f2 = Add();

调用std::function对象
可以像调用函数一样调用std::function对象,例如:

int result1 = f1(1, 2);
int result2 = f2(3, 4);

检查std::function对象是否为空
可以使用std::function对象的bool()运算符来检查它是否为空,例如:

std::function<int(int, int)> f;
if (f) {
int result = f(1, 2);
}

使用std::bind绑定成员函数或对象的成员函数
std::bind可以将成员函数或对象的成员函数绑定到std::function对象上,例如:

class Calculator {
public:
int add(int a, int b) {
return a + b;
}
}; Calculator calc;
std::function<int(int, int)> f = std::bind(&Calculator::add, &calc, std::placeholders::_1, std::placeholders::_2); int result = f(1, 2);

以上是std::function的一些常见用法,还有其他更高级的用法,需要根据具体情况使用。

C++中std::function常见用法的更多相关文章

  1. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  2. JAVA中enum的常见用法

    JAVA中enum的常见用法包括:定义并添加方法.switch.遍历.EnumSet.EnumMap 1.定义enum并添加或覆盖方法 public Interface Behaviour{ void ...

  3. C++ 中std::function 、std::bind的使用和lambda的使用

    std::function是可调用对象的包装器:std::bind是将可点用对象和其参数一起进行绑定,且绑定后的结果可以使用std::function对象进行保存,并延迟调用到需要调用的时候: 在C+ ...

  4. C++11新特性之二——std::bind std::function 高级用法

    /* * File: main.cpp * Author: Vicky.H * Email: eclipser@163.com */ #include <iostream> #includ ...

  5. C++11中std::function的使用

    class template std::function is a general-purpose polymorphic function wrapper. Instances of std::fu ...

  6. (转)轻松掌握shell编程中数组的常见用法及示例

    缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助.其实SHELL的数组很简单,好用.我们学习 ...

  7. Java中枚举的常见用法

    在JDK1.5以后引入了一种新的类型,就是枚举(enum).enum是用来声明枚举类型数据,它可以像数组一样存储许多的元素,但是不同于数组的是,它除了数字不能存储以外, 其他类型的如字母.特殊符号.汉 ...

  8. 转:VC中MessageBox的常见用法

    一.关于MessageBox       消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合.       1.MessageBox("这是一个最简单的 ...

  9. VC中MessageBox的常见用法

    一.关于MessageBox       消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合.       1.MessageBox("这是一个最简单的 ...

  10. VC++中MessageBox的常见用法详解

    消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合.         1.MessageBox("这是一个最简单的消息框!");        ...

随机推荐

  1. 实例详解在Go中构建流数据pipeline

    本文分享自华为云社区<Go并发范式 流水线和优雅退出 Pipeline 与 Cancellation>,作者:张俭. 介绍 Go 的并发原语可以轻松构建流数据管道,从而高效利用 I/O 和 ...

  2. Spring Boot学生信息管理系统项目实战-1.项目介绍

    1.获取源码 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.项目背景 刚开始自己帮教师朋友写的,核心是学生信息的导入导出功能.后来又扩展了几个模块. 水平一般能力有限,觉着有用的朋友可以拿去自 ...

  3. error C2039: "function": 不是 "std" 的成员的解决方法

    这个错误通过某度没找到合适的解决方案,故记录下来 其实如果使用 google 搜索错误的英文关键词,大概第一条就是解决问题的链接 Large number of "'function' is ...

  4. win32 - 使用Safer API创建受限的令牌

    #include <Windows.h> #include <WinSafer.h> #include <stdio.h> #include <sddl.h& ...

  5. redis7源码分析:redis 启动流程

    1. redis 由 server.c 的main函数启动 int main(int argc, char **argv) { ... // 上面的部分为读取配置和启动命令参数解析,看到这一行下面为启 ...

  6. Java 使用 itext 向PDF插入数据和图片

    Java 使用 itext 向PDF插入数据和图片 一.下载Adobe Acrobat DC 二.制作模板 1.准备一个word模板,并转换成PDF格式 2.使用Adobe Acrobat DC打开P ...

  7. SpringBoot 服务接口限流,搞定!

    来源:blog.csdn.net/qq_34217386/article/details/122100904   在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流.限流可以认为服务降级的一种 ...

  8. 在写dockerfile时替换国内源

    众所周知,Debian是linux发行版中官方源最难用的一个,这个傻逼源让我再构建docker镜像时卡了很久. ​ 那么能不能替换构建dockerfile时使用的源呢?显然是可以的 ​ 在与Docke ...

  9. 【Azure 媒体服务】在Azure Media Service门户中使用HLS模式传输视频流,播放视频步骤

    问题描述 如何在Azure Media Service门户中使用HLS模式传输视频流,播放视频步骤 问题解决 第一步:在 Media Service 这边点击资产.上传本地视频资源作为Media Se ...

  10. Linux安装Docker教程

    介绍 Docker利用Linux核心中的资源分脱机制,例如cgroups,以及Linux核心名字空间(name space),来创建独立的软件容器(containers).可以在单一Linux实体下运 ...