在 C++ 中,callable 类型(可调用类型)是指可以像函数一样被调用的对象

C++ 中有多种不同的可调用对象类型,它们可以通过函数调用运算符 () 被调用。

常见的 callable 类型包括:

  1. 普通函数(普通函数、静态函数、成员函数)
  2. 函数指针
  3. 仿函数(函数对象)
  4. Lambda 表达式
  5. std::function 类型

1. 普通函数

普通的全局函数或静态成员函数是最常见的 callable 类型,它们可以直接通过 () 被调用。

#include <iostream>
void my_function() {
std::cout << "Hello from a regular function!" << std::endl;
} int main() {
my_function(); // 直接调用函数
}

2. 函数指针

函数指针是指向函数的指针,也是一种可调用对象。

#include <iostream>
void my_function() {
std::cout << "Hello from a function pointer!" << std::endl;
} int main() {
void (*func_ptr)() = my_function; // 定义函数指针
func_ptr(); // 通过函数指针调用函数
}

3. 仿函数(函数对象)

仿函数是通过重载 operator() 运算符的类或结构体实例。这使得类的实例可以像函数一样被调用。

#include <iostream>

struct MyFunctor {
void operator()() const {
std::cout << "Hello from a functor!" << std::endl;
}
}; int main() {
MyFunctor functor;
functor(); // 调用仿函数
}

4. Lambda 表达式

Lambda 表达式是 C++11 引入的匿名函数,可以捕获外部变量。它们也是一种 callable 类型。

#include <iostream>

int main() {
auto lambda = []() {
std::cout << "Hello from a lambda!" << std::endl;
};
lambda(); // 调用 lambda
}

5. std::function

std::function 是一个通用的函数包装器,可以存储任何可调用对象,包括函数、lambda 表达式、仿函数等。

#include <iostream>
#include <functional> void my_function() {
std::cout << "Hello from std::function!" << std::endl;
} int main() {
std::function<void()> func = my_function;
func(); // 通过 std::function 调用函数
}

总结:

在 C++ 中,callable 类型泛指那些可以通过 () 操作符调用的对象,主要包括:

  1. 普通函数
  2. 函数指针
  3. 仿函数(函数对象)
  4. Lambda 表达式
  5. std::function

这些不同的 callable 类型使得 C++ 拥有强大的函数抽象和灵活的调用机制。

callable类型 是什么?的更多相关文章

  1. Callback/Callable类型

    自PHP5.4起可用callable类型指定回调类型callback. 一些函数如call_user_func()或usort()可以接受用户自定义的回调函数作为参数.回调函数不止可以是简单函数,还可 ...

  2. Callable接口、Runable接口、Future接口

    1. Callable与Runable区别 Java从发布的第一个版本开始就可以很方便地编写多线程的应用程序,并在设计中引入异步处理.Thread类.Runnable接口和Java内存管理模型使得多线 ...

  3. Callable与Future、FutureTask的学习 & ExecutorServer 与 CompletionService 学习 & Java异常处理-重要

    Callable是Java里面与Runnable经常放在一起说的接口. Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程执行的任务 ...

  4. Callable与Future的简单介绍

    Callable与Future的介绍 Callable与 Future 两功能是Java在后续版本中为了适应多并法才加入的,Callable是类似于Runnable的接口,实现Callable接口的类 ...

  5. 类型 - PHP手册笔记

    类型简介 PHP 支持 8 种原始数据类型. 四种标量类型: boolean(布尔型,不区分大小写) integer(整型) float(浮点型,也称作double) string(字符串) 两种复合 ...

  6. Callable 获取线程返回值

    allable与 Future 两功能是Java在兴许版本号中为了适应多并法才增加的,Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它 ...

  7. Java多线程之Executor、ExecutorService、Executors、Callable、Future与FutureTask

    1. 引子 初学Java多线程,常使用Thread与Runnable创建.启动线程.如下例: Thread t1 = new Thread(new Runnable() { @Override pub ...

  8. Java多线程Runnable与Callable区别与拓展

    我们先来分别看一下这两个接口 Runnable: // // Source code recreated from a .class file by IntelliJ IDEA // (powered ...

  9. Callable与Future

    本文可作为传智播客<张孝祥-Java多线程与并发库高级应用>的学习笔记. 在前面写的代码中,所有的任务执行也就执行了,run方法的返回值为空. 这一节我们说的Callable就是一个可以带 ...

  10. Callable和Future、FutureTask的使用

    http://www.silencedut.com/2016/06/15/Callable%E5%92%8CFuture%E3%80%81FutureTask%E7%9A%84%E4%BD%BF%E7 ...

随机推荐

  1. Codeforces Round 953 (Div. 2)

    Codeforces Round 953 (Div. 2) 闲来无事水题解. A . B . C 显然 \(k\) 是偶数.考虑 \(k\) 的上界,\(p_{1}=n,p_{n}=1\),产生 \( ...

  2. iOS开发基础144-逐字打印效果

    在AIGC类的APP中,实现那种一个字一个字.一行一行地打印出文字的效果,可以通过多种方法来实现.下面是一些实现方法,使用Swift和OC来举例说明. OC版 1. 基于定时器的逐字打印效果 可以使用 ...

  3. 【IDEA】使用Maven骨架创建JavaWeb项目

    IDEA版本:2020.1 骨架选项名称: org.apache.maven.archetypes:maven-archetype-webapp 本项目的Maven坐标设置: 设置优先从本地获取骨架: ...

  4. Arm V8 - ADRP指令

    ADRP指令 作用 将当前指令所在页的基地址加/减去字节差,并写入目标寄存器 字节差:与目标地址页基地址的间隔字节数,其为PAGE_SIZE的整数倍 此时的字节差就是指令所操作的立即数 该指令通常配合 ...

  5. NVIDIA机器人仿真项目 —— Isaac Gym - Preview Release

    地址: https://developer.nvidia.com/isaac-gym 过期代码库地址:(已不再维护的代码库,现已由isaac gym项目合并到isaac sim项目)(2022年开始停 ...

  6. ubuntu系统下 vscode中如何指定conda环境

    参考: https://blog.csdn.net/mieleizhi0522/article/details/89336321 =================================== ...

  7. Ubuntu18.04server 双网卡,开机自动设置路由并启动校园网网络认证程序(Ubuntu开机自动设置路由,开机自启动应用程序)

    本博主为高龄在校生,实验室服务器需要假期时候无人守候也能实现自动登录校园网从而实现网络连接,以使实验室同学在家也可以使用校园vpn连接服务器. 由于假期时候实验室没有人,而假期实验室可能会出现断电断网 ...

  8. obs 直播软件 虚拟摄像头插件 —— obs-virtualcam

    如题: 外网下载地址: https://github.com/Fenrirthviti/obs-virtual-cam/releases 这个东西是做啥用的这里就不讲了,这个东西的资源不好找,找了好半 ...

  9. 简单易懂的BFS

    最近学习BFS,看到许多教程都用C++内置的queue,但其实还有更简单的方法. 先了解概念:BFS与DFS不同,举个例子: 我们来用DFS遍历这棵树:A.B.D.E.G.C.F 但我们用BFS遍历这 ...

  10. Apache DolphinScheduler社区又一PMC获推选通过!

    PROFILE 姓名:程鑫 公司:阿里云 职位:开发工程师 Github ID: rickchengx 从事领域:大数据调度系统开发 兴趣爱好:健身 推举理由 他于2022年8月2日开始了他的Dolp ...