在C++中存在"可调用对象"这么一个概念,准确来说,可调用对象有如下几种定义:

1.是一个函数指针

代码如下:

int print(int a, double b)
{cout << a << b << endl;return 0;
}int(*func)(int, double) = &print;

2.是一个具有operator()成员函数的类对象(仿函数)

代码如下:

#include <vector>
#include <iostream>
#include <string>using namespace std;using func_ptr = void(*)(int, string);struct Test
{void operator()(int x){cout << "x = " << x << endl;}
};int main()
{Test t1;t1(19);return 0;
}

测试结果:

3.是一个可被转换为函数指针的类对象

代码如下:

#include <vector>
#include <iostream>
#include <string>using namespace std;using func_ptr = void(*)(int, string);struct Test
{static void print(int a, string b){cout << "name = " << b << ",age = " << a << endl;}//将类对象转换成函数指针operator func_ptr(){return print;//需要是静态函数}
};int main()
{Test t1;t1(19, "nihao");return 0;
}

测试结果:


4.是一个类成员函数指针或者类成员指针

代码如下:

#include <vector>
#include <iostream>
#include <string>using namespace std;using funcptr = void(*)(int, string);struct Test
{static void print(int a, string b){cout << "name = " << b << ",age = " << a << endl;}void hello(int a, string b){cout << "name = " << b << ",age = " << a << endl;}int id = 520;};int main()
{Test t1;funcptr f = Test::print;//类的函数指针using fptr = void(Test::*)(int, string);fptr f1 = &Test::hello;//类的成员指针(变量)using ptr1 = int Test::*;ptr1 pt = &Test::id;Test ttt;(ttt.*f1)(20, "tom");ttt.*pt = 100;cout << "id = " << ttt.id << endl;return 0;
}

测试结果:

[C++11]可调用对象相关推荐

  1. [C++11]可调用对象绑定器

    std::bind用来将可调用对象与其参数一起进行绑定.绑定后的结果可以使用std::function进行保存,并延迟调用到任何我们需要的时候.通俗来说,它主要有两个作用: 1.将可调用对象与其参数一 ...

  2. [C++11]可调用对象包装器function

    可调用对象包装器 std::function是可调用对象的包装器.它是一个类模板,可以容纳除了类成员(函数)指针之外的所有可调用对象.通过指定它的模板参数,它可以用统一的方式处理函数,函数对象,函数指 ...

  3. C++11新特性之可调用对象包装器和绑定器

    一.可调用对象 C++中可调用对象有六种. 1.普通函数 普通函数类型可以声明函数,定义函数指针和引用,但是不能定义函数的实体. using Fun = void (int, const string ...

  4. 使用委派调用对象的方法

    委派即可以调用静态类方法,也可以调用对象方法.如下面的类Person定义了两个私有域来存储一个人的名字和年龄 1 public class Person 2 { 3 4 // declare two ...

  5. C++ Primer 5th笔记(chap 14 重载运算和类型转换)可调用对象与function

    1. 5种形式 可调用对象有5种形式,类型各不同: 形式 解释 函数 返回值类型和实参类型 函数指针 返回值类型和实参类型 lambda表达式 类类型 bind创建的对象 todo 重载了函数调用运算 ...

  6. C++中的各种可调用对象

    概述 一组执行任务的语句都可以视为一个函数,一个可调用对象.在程序设计的过程中,我们习惯于把那些具有复用性的一组语句抽象为函数,把变化的部分抽象为函数的参数. 函数的使用能够极大的极少代码重复率,提高 ...

  7. C/C++: C++可调用对象详解

    C++中有几种可调用对象:函数,函数指针,lambda表达式,bind创建的对象,以及重载了函数调用符的类. 1. 函数 函数偏基础的东西,在这里不再叙述.重点讲下C++11的某些重要特性和函数指针. ...

  8. 《Android游戏开发详解》——第2章,第2.13节调用对象的行为

    本节书摘来自异步社区<Android游戏开发详解>一书中的第2章,第2.13节调用对象的行为,作者 [美]Jonathan S. Harbour,更多章节内容可以访问云栖社区"异 ...

  9. 可调用对象、std::function、std::bind

    可调用对象.std::function.std::bind 仿函数functors function adapter bind(C++11) 函数适配器:bind2nd 仿函数适配器(mem_fun/ ...

最新文章

  1. JS实现HTML上用button打开文件对话框
  2. 字符串操作--宽窄字符转换
  3. 一个比较牛的Js写的五子棋
  4. python第一周:python初识、流程控制
  5. 【Swift学习】Swift编程之旅---ARC(二十)
  6. 直接在script里面换样式IE6,7,8不兼容
  7. 8. Geometric problems
  8. 实现Linux系统外部和容器内部的文件传输
  9. 中年程序员对核心竞争力“不可替代”的重新认识
  10. 【转】Cowboy 开源 WebSocket 网络库
  11. 使用 GNU CC 的预编译头文件加快编译速度
  12. 《大数据技术原理与应用》第一章-大数据概述
  13. 民间文学【0006】
  14. 谷歌今年在中国新招200人 应届毕业生占50%
  15. Redis基础篇(万丈高楼平地起):核心底层数据结构
  16. 专访腾讯安全王雷雷丨构建智能风控体系,护航私域营销安全
  17. 淘淘商城(前台系统,展示商城首页,商品分类展示)
  18. [机缘参悟-34]:光锥之内皆命运
  19. 花了我很长时间整理出来的绿色软件[小蓉整理]
  20. 苹果(apple)支付退款通知、api

热门文章

  1. 完美解决ArcGIS10.x栅格空间插值报错无法进行和导出插值栅格结果出错的问题
  2. C#委托、事件学习之(二)——简单按钮委托事件
  3. LeetCode之Reverse String
  4. OPENSSL ENGINE机制
  5. Android之getCacheDir()和getFilesDir()方法区别
  6. Android之内存溢出(Out Of Memory)的总结
  7. ideaspringboot项目上传服务器_nuxt+pm2 自动化部署及打包后文件自动上传阿里云 oss
  8. 盘点这些年被黑的最惨的语言
  9. 如何用Python进行数据探索,探索竞赛优胜方案?
  10. 编程从业五年的十四条经验,句句朴实