首页 > 编程语言 >C++函数传递函数指针、仿函数、绑定器、可调用对象

C++函数传递函数指针、仿函数、绑定器、可调用对象

时间:2023-08-01 15:34:54浏览次数:25  
标签:cout int C++ num 传递函数 include functor 函数

只定义void testFunc(int num, const std::function<int(int)>& functor)就可以,其他的相当于这个函数的特化版本

#include <iostream>
#include <functional>
using namespace std;

int func1(int num)
{
    cout << " func1: " << num << endl;
    return 1;
}

// 仿函数
class funcClass
{
public:
    int operator()(int num) const{
        cout << " funcClass: " << num << endl;
        return 1;
    }
};

// 可调用对象
std::function<int(int)> func3 = [](int num)->int{
        cout << " function:fun3 "<< num << endl;
        return 1;
    };

// 可以接受原生函数指针、类的静态成员函数、仿函数、绑定器bind、可调用对象function
void testFunc(int num, const std::function<int(int)>& functor)
{
    cout << "调用绑定器函数" << endl;
    functor(num);
}

// 相当于进行了特化
void testFunc(int num, int (*functor)(int))
{
    cout << "调用函数指针" << endl;

    functor(num);
}

// 相当于进行了特化
void testFunc(int num, const funcClass& functor)
{
    cout << "调用仿函数" << endl;

    functor(num);
}



// g++
int main()
{
    funcClass()(1); // 创建临时对象调用函数
    testFunc(2, func1);    // 传递函数指针

    // error:匿名函数,函数指针与可调用对象的重载冲突
    // testFunc(3, [](int num)->int{
    //     cout << "lambda: " << num << endl;
    //     return 1;
    // });
    
    testFunc(4, funcClass());   // 传递仿函数
    testFunc(5, func3);         // 传递可调用对象
    testFunc(6, std::bind(funcClass(), placeholders::_1));         // 传递绑定器
}

标签:cout,int,C++,num,传递函数,include,functor,函数
From: https://www.cnblogs.com/xiaohuidi/p/17596642.html

相关文章

  • Python 函数 类 语法糖
    Python语法糖\,换行连接Pythons=''s+='a'+'b'+'c'n=1+2+3#6while,for循环外的else如果while循环正常结束(没有break退出)就会执行else。Pythonnum=[1,2,3,4]mark=0whilemark<len(num):......
  • 《dll篇》c#调用c++dll
    c#调用c++dll参考链接:https://jingyan.baidu.com/article/5d6edee2da72d699eadeecfe.html生成dll环境:VS2008新建项目->VisualC++->Win32项目MyDLL注意:C++编写的dll一般是不能直接拿来C#调用,需要先新建个C++的工程把dll里的方法重新封装成可被C#外部调用的函数。MyDLL.cp......
  • 记录每一天,lambda 与 函数式 接口。
    lambda与函数式接口01偶然遇到LocalDate的方法,真是太惊喜了,以前每次处理起时间,日期都要很头疼。当时真是烦人啊。学习过LocalDate后日期,与时间的处理感觉手到擒来啊,爱你LocalDate。学习过程中发现他是jdk1.8的新特性。您猜我又遇到了什么lambda表达式与函数......
  • c++多线程同步
    死锁问题1单核实时可抢占的系统中,优先级不同的三个线程A/B/C,A>B>C当C先获得时间片开始执行,并获得锁A因为高优先级,被唤醒并中断C,但没有得到锁,而阻塞B获得执行机会,由于优先级高于C,B会一直执行,让AC系统无法取得任何进展std::stack<T>stack;std::mutexmutex;voidpush(c......
  • 无涯教程-Lua - 函数声明
    函数是一起执行任务的一组语句,您可以将代码分成单独的函数。Lua语言提供了程序可以调用的许多内置方法。如方法print()打印在控制台中作为输入传递的参数。定义函数Lua编程语言中方法定义的一般形式如下-optional_function_scopefunctionfunction_name(argument1,argume......
  • RichEdit RTF格式文本的存储和读取 VC++
    Rtf格式文本的读写,向控件发送EM_STREAMIN和EM_STREAMOUT消息,控件把格式文本显示或从把显示内容转化为格式文本。接口是用户定义的回调函数,格式文本由参数DWORD_PTRdwCookie传递。从控件读出RTF文本,参数用string比较好,因为消息处理是根据文本的长度,多次调用回调函数,传出数......
  • C++ Primer 第五版
    当我们使用istream对象作为条件时,其效果是检测流的状态.char:[-128,127].C++17新增byte数据类型,在<cstddef>头文件中定义,取值范围:[0,255].int和long都占用4字节空间.切勿混用带符号类型和无符号类型.\后跟3位以内8进制数字,或\x后跟一个或多个16进制数字都可以代表字符......
  • Python高级过滤器:掌握filter函数从入门到精通
    简介在Python中,filter()是一个非常有用的内置函数,它能够根据指定的函数来筛选出可迭代对象中满足条件的元素,返回一个迭代器。filter()函数的使用能够简化代码,并提高程序的可读性。本文将从入门到精通,全面介绍filter()函数的用法和相关知识点。1.filter()函数的基本用法filter(......
  • 欧拉函数
    欧拉函数其实我接触挺久了,一开始就是为了做pta的题刷分才学的,,,后来发现,woc这玩意儿还挺有深度????这是我一开始的笔记,还挺潦草: 我自己也看了老半天才看明白我之前写的什么鬼玩意儿。。。。。。 重开。。。 欧拉函数(Euler'stotientfunction),即φ(n),表示的是小于等于n和n互质......
  • 【暑假例题】20230727 矩阵基本运算(C++)
    题目请使用C++实现矩阵的各种运算矩阵创建矩阵相加矩阵相减矩阵相乘数字乘矩阵矩阵上叠加矩阵左右叠加矩阵转置矩阵旋转矩阵求逆矩阵输出题目分析矩阵创建这里只需注意由于我们需要通过不同的函数对数组进行操作,所以我们需要将数组存储在容器或者使用指针防止数......