文档章节

C++ 仿函数(functor)

吃一堑消化不良
 吃一堑消化不良
发布于 2016/11/04 11:00
字数 284
阅读 87
收藏 1

所谓的仿函数(functor),是行为像函数,且能像函数一样工作的东西。

1、C语言使用函数指针和回调函数来实现仿函数,例如一个用来排序的函数可以这样使用仿函数

#include <stdio.h>  
#include <stdlib.h>  

int sort_function( const void *a, const void *b)
{
    return *(int*)a-*(int*)b;
}

int main()  
{
   int list[5] = { 54, 21, 11, 67, 22 };
   qsort((void *)list, 5, sizeof(list[0]), sort_function);//起始地址,个数,元素大小,回调函数
   for (int x = 0; x < 5; x++)
   {
       printf("%i\n", list[x]);
   }
   return 0;  
}

2、C++里,我们通过在一个类中重载括号运算符 () 的方法来使用仿函数

#include <iostream>
#include <algorithm>
  
using namespace std;
template<typename T>
class show 
{  
public:  
    void operator()(const T &x)  
    {
        cout << x << " ";   
    }   
};   

int main()  
{  
    int list[]={1,2,3,4,5};  
    for_each(list,list+5,show<int>());
    return 0;   
}   

3、C++11中,通过std::function来实现对C++中各种可调用实体(普通函数、Lambda表达式、函数指针、以及其它函数对象等)的封装,形成一个新的可调用的std::function对象。

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

std::function< int(int)> Functional;
int TestFunc(int a)
{
    return a;
}

int main()
{
    Functional = TestFunc;
    int result = Functional(10);
    cout << "TestFunc:"<< result << endl;
}

 

© 著作权归作者所有

吃一堑消化不良
粉丝 28
博文 188
码字总数 112947
作品 0
浦东
程序员
私信 提问
C++仿函数(functor)

什么是仿函数(functor) functor的英文解释为something that performs a function,即其行为类似函数的东西。C++中的仿函数是通过在类中重载()运算符实现,使你可以像使用函数一样来创建类的...

雪让
2013/12/01
0
1
从for_each开始说起 回调函数与仿函数

#include <iostream> include <algorithm> using namespace std;//回调函数void call_back(char elem){ cout << elem << endl;}//仿函数struct Functor{ void operator() (char elem) { cou......

NDSM
2014/07/14
0
1
boost源码剖析之:泛型函数指针类boost::function(rev#3)

boost源码剖析之:泛型函数指针类boost::function(rev#3) 刘未鹏 C++的罗浮宫(http://blog.csdn.net/pongba) Note: 并非新作,03年曾放在blog上,现在这个版本应该是修改后的最终版本。 前奏...

长平狐
2012/08/28
218
0
9 个开始使用 C++11 的理由

如果你的代码工作正常并且表现良好,你可能会想知道为什么还要使用C++ 11。当然了,使用用最新的技术感觉很好,但是事实上它是否值得呢? 在我看来,答案毫无疑问是肯定的。我在下面给出了9...

tsl0922
2012/05/14
9.3K
42
c++模版的使用(template)

模板的概念。 我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对...

徐学良
2015/06/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
20分钟前
3
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
3
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
11
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部