首页 > 其他分享 >std::function类的使用示例

std::function类的使用示例

时间:2024-01-24 17:26:09浏览次数:22  
标签:std function 封装 示例 int 返回值 include

std::function是C++标准库中的一个模板类,用于封装可调用的目标,比如函数、函数指针、成员函数指针、Lambda表达式等,使得它们可以像普通函数一样被调用。这种灵活性使得std::function在许多场景下都非常有用。

以下是std::function的一般用法:

1. 封装函数指针

1.1 不带参数和返回值

#include <functional>  
#include <iostream>  
  
void sayHello() {  
    std::cout << "Hello!" << std::endl;  
}  
  
int main() {  
    std::function<void()> func = sayHello;  
    func(); // 调用 sayHello  
    return 0;  
}  

1.2 带参数和返回值

#include <functional>  
#include <iostream>  
  
// 普通函数  
int multiply(int a, int b) {  
    return a * b;  
}  
  
int main() {  
    // 封装带参数和返回值的普通函数  
    std::function<int(int, int)> multiply_function = multiply;  
  
    // 调用封装的普通函数  
    int result = multiply_function(5, 4);  
    std::cout << "Result: " << result << std::endl; // 输出 20  
  
    return 0;  
}

2. 封装Lambda表达式

2.1 不带参数和返回值

#include <functional>  
#include <iostream>  
  
int main() {  
    std::function<int(int, int)> add = [](int a, int b) { return a + b; };  
    std::cout << add(3, 4) << std::endl; // 输出 7  
    return 0;  
}  

2.2 带参数和返回值

#include <functional>  
#include <iostream>  
  
int main() {  
    // 封装带参数和返回值的匿名函数  
    std::function<int(int, int)> add = [](int a, int b) {  
        return a + b;  
    };  
  
    // 调用封装的匿名函数  
    std::cout << "Sum: " << add(3, 4) << std::endl; // 输出 7  
  
    return 0;  
}

3. 作为容器元素

3.1 不带参数和返回值

#include <functional>  
#include <iostream>  
#include <vector>  
  
int main() {  
    std::vector<std::function<void()>> funcs;  
    funcs.push_back([]() { std::cout << "Function 1" << std::endl; });  
    funcs.push_back([]() { std::cout << "Function 2" << std::endl; });  
  
    for (const auto& func : funcs) {  
        func();  
    }  
  
    return 0;  
}

3.2 不带参数和返回值

大概可以自行推断了。

 

标签:std,function,封装,示例,int,返回值,include
From: https://www.cnblogs.com/freecheng/p/17985046

相关文章

  • 华为三层交换机与路由器配置上网示例——学会这个,你就是IT界大佬
    特性配置案例适用的产品和版本说明本手册适用于通过命令行配置的框式交换机和盒式交换机(S300、S500、S2700、S3700、S5700、S6700、S7700、S7900、S9700共用一套)的多个版本,每个案例所支持的产品和版本不同,每个案例适用产品和版本请参看具体页面中的“配置注意事项”。若无特殊说明,......
  • IPC-MQ-代码示例
    客户端-服务端版本一Codeintcommom_msg(intmsgFlag){ //生成IPC关键字 key_tk=ftok(PATHNAME,PROJ_ID); //获取消息队列ID intmsgId=msgget(k,msgFlag); if(msgId<0) { perror("msggeterror"); return-2; } returnmsgId;}intget_msg(void)......
  • java8 函数式(Functional)接口
    什么是函数式(Functional)接口 只包含一个抽象方法的接口,称为函数式接口。 你可以通过Lambda表达式来创建该接口的对象。(若Lambda表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明)。 我们可以在一个接口上使用@FunctionalInterfa......
  • Optional类的使用示例
    Optional类是Java8中引入的一个新特性,它可以用来解决空指针异常的问题。在之前的版本中,如果一个方法返回的结果有可能为空,我们通常需要在使用该结果之前进行判空操作,以避免出现NullPointerException。而使用Optional类可以更加简洁和安全地处理这种情况。下面是一个使用Optional......
  • 第十二天:函数 function
    一、函数介绍函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分函数和shell程序区别Shell程序在子Shell中运行函数在当前Shell中运行。因此在当前Shell中,函......
  • fft/ifft示例
     clearall;lstf=1/sqrt(2)*[0,0,0,0,0,0,0,0,1+1i,0,0,0,-1-1i,0,0,0,1+1i,0,0,0,-1-1i,0,0,0,-1-1i,0,0,0,1+1i,0,0,0,0,0,0,0,-1-1i,0,0,0,-1-1i,0,......
  • 【C++进阶】function和bind及可变模板参数
     文章目录1.function和bind1.1function使用方法1.2bind2.可变模板参数2.1可变模板参数函数2.2可变模板参数的展开 1.function和bindC++中的function和bind是为了更方便地进行函数对象的封装和调用而设计的。function是一个通用的函数对象容器......
  • 抽象类示例
    1publicabstractclassCard{2privateStringname;3privatedoublemoney;45publicabstractvoidpay(doublemoney);67publicStringgetName(){8returnname;9}1011publicvoidsetName(Stringname){......
  • nc命令用法示例
    nc简介ncnc全称netcat,又叫做瑞士军刀,是一款简单、可靠的网络工具。作用实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口端口扫描,nc可以作为client发起TCP或UDP连接机器之间传输文件机器之间网络测速安装CentOS/RHEL/Fedora:yuminstall-yncnc......
  • numba cannot be imported and numba functions are disabled. Probably the executio
    问题描述运行代码会出现警告信息numbacannotbeimportedandnumbafunctionsaredisabled.Probablytheexecutionisslow.Pleaseinstallnumbatogainamassivespeedup.(orifyoupreferslowexecution,settheflagnumba=Falsetoavoidthiswarning!)即使......