首页 > 其他分享 >callable类型 是什么?

callable类型 是什么?

时间:2024-09-29 18:12:39浏览次数:9  
标签:function std 调用 函数 什么 callable 类型 include

在 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++ 拥有强大的函数抽象和灵活的调用机制。

标签:function,std,调用,函数,什么,callable,类型,include
From: https://www.cnblogs.com/niumachen/p/18440545

相关文章

  • 年底展会上什么品类会火?第八届杭州国际网红品牌博览会现场来解答
    年底要参展,那么我们要参加什么类型的展会效果会好呢?年底参加的展会一定要有食品零食区、服装鞋包区、家居百货区、小家电展区、母婴产品区、技术服务区等。‌这些展区涵盖了从食品零食到服装鞋包、家居百货、小家电、母婴产品和技术服务等广泛领域,为参展企业和参观者提供了一......
  • vue中使用decimal.js对前端数值类型进行高精度计算
    需求背景:由于一些场景我们需要在前端JavaScript进行数值计算,且对精度要求比较严谨,而前端数值是浮点类型,直接使用计算可能会产生一系列的精度问题,常见的浮点运算问题,比如精度损失等;所以例如涉及到一些金额计算等,需要进行高精度处理。解决方案:(1)可以把数值计算部分逻辑交给后端接口......
  • 线程安全是什么?
    线程安全(ThreadSafety)指的是,当多个线程并发执行某段代码时,不会出现竞态条件(RaceCondition)等问题,程序能够按照预期正确运行。一个线程安全的函数,即使在多线程环境下被多个线程同时调用,也能确保其执行的正确性,不会因为共享资源的并发访问而引发错误。线程安全的定义线程安全的......
  • 红帽RHCE和RHCA有什么区别
    在红帽认证体系当中,RHCE(RedHatCertifiedEngineer)以及RHCA(RedHatCertifiedArchitect)乃是两项极具声望的高级认证。众多人士对于它们彼此之间存在的区别,深感困惑不解。接下来,IT小编将会引领大家一道深入细致地探究RHCE和RHCA认证的差异所在,助力您明晰并拣选出契合......
  • 校园跑腿系统二手市场校园搭子校园社团活动系统2000的和4800的有什么区别
    校园跑腿系统、二手市场、校园搭子、校园社团活动系统在不同价格档位(如2000元和4800元)之间可能存在多方面的区别,这些区别主要体现在功能丰富性、技术支持、用户体验、定制化程度以及后续服务等方面。然而,由于具体的价格差异和系统提供商的不同,以下分析是基于一般情况的推测,实际......
  • 期刊投稿|投稿前做什么准备工作(文件和信息)
    投稿前,事先准备好所有可能需要的投稿信息,确保整个投稿过程的稳妥顺利进行。(以下是一些常见信息)论文源文件*:不仅要PDF文件,还要整个可编辑的项目(.tex/.doc文件,以及所有附带的配置文件.bib/.bbl/.bst/.sty/.cls、图片表格文件)论文信息*:题目、摘要、关键词论文主题:可以参考期刊官......
  • 安全运营工程师是做什么的?零基础入门安全运营(非常详细)看一篇就够了!
    前言什么是安全运营工程师安全运营工程师是网络安全大方向下网络安全运行与维护岗的一个细分岗位。1、安全运营工程师需要具备哪些综合能力?对安全行业发展趋势及生态有良好的认知;具备优秀的逻辑分析能力、表达能力、文字撰写的能力;拥有良好的跨团队协调和推进项目的......
  • 什么样的人适合学习网络安全?
    有很多想要转行网络安全或者选择网络安全专业的人在进行决定之前一定会有的问题:什么样的人适合学习网络安全?我适不适合学习网络安全?会产生这样的疑惑并不奇怪,毕竟网络安全这个专业在2017年才调整为国家一级学科,而且大众对于网络安全的认知度不高,了解最多的可能就是个人信息......
  • 工厂生产制造物料ERP作什么的
    在现代制造业中,企业资源计划(EnterpriseResourcePlanning,ERP)系统已经成为提高运营效率、降低生产成本的关键工具。特别是在生产制造过程中,物料管理是保证产品质量和生产流程顺畅的重要环节。一个有效的ERP系统能够帮助企业实现对原材料采购、库存控制、生产计划及成品出货等......
  • 【TypeScript】函数详解:参数和返回值的类型注解
    文章目录一、函数基础概述1.参数类型注解2.参数个数检查3.可选参数和默认值二、返回值类型注解1.基本的返回值类型注解2.自动类型推断三、异步函数与Promise返回值类型四、匿名函数与上下文类型推断五、高阶函数与回调六、总结TypeScript是JavaScript的......