see link: https://isocpp.org/wiki/faq/pointers-to-members
function vs template: http://stackoverflow.com/questions/14677997/stdfunction-vs-template

boost::functoin/std::function可用于全部 operator() 操作的对象(函数,类。成员函数。lambda表达式等等)。

用处就是能够使用一个函数指针调用不用的函数实体(仅仅要他们的signature一样),实现回调函数。或者多种不同的算法等等。
关于 std::function的实现。 see link:http://stackoverflow.com/questions/18453145/how-is-stdfunction-implemented
非常好的样例:原文链接

#include <functional>
#include <iostream>
using namespace std;std::function< int(int)> Functional;// 普通函数
int TestFunc(int a)
{return a;
}// Lambda表达式
auto lambda = [](int a)->int{ return a; };// 函数对象(functor)
class Functor
{
public:int operator()(int a){return a;}
};// 1.类成员函数
// 2.类静态函数
class TestClass
{
public:int ClassMember(int a) { return a; }static int StaticMember(int a) { return a; }
};int main()
{// 普通函数Functional = TestFunc;int result = Functional(10);cout << "普通函数:"<< result << endl;// Lambda表达式Functional = lambda;result = Functional(20);cout << "Lambda表达式:"<< result << endl;// 仿函数Functor testFunctor;Functional = testFunctor;result = Functional(30);cout << "仿函数:"<< result << endl;// 类成员函数TestClass testObj;Functional = std::bind(&TestClass::ClassMember, testObj, std::placeholders::_1);result = Functional(40);cout << "类成员函数:"<< result << endl;// 类静态函数Functional = TestClass::StaticMember;result = Functional(50);cout << "类静态函数:"<< result << endl;return 0;
}

function简化了函数指针的使用:

class FooClass {
public:void Print( int a ) {std::cout << "A FooClass, param = "<< a <<" this = " << this << std::endl;}
};void main() {FooClass *myFoo = new FooClass();void( FooClass::* oldFunc )(int) = &FooClass::Print; //C style function pointer(myFoo->*oldFunc)( 5 );boost::function newFunc = boost::bind( &FooClass::Print, myFoo, _1 ); //boost function      newFunc( 5 );
}

转载于:https://www.cnblogs.com/mengfanrong/p/5186058.html

函数指针amp;绑定: boost::functoin/std::function/bind相关推荐

  1. 成员函数在外部调用的方式总结-函数指针强制绑定+lamda函数闭包行为实现this指针的绑定

    C++函数指针 使用对象指针绑定进行调用 C++中因为函数指针需要绑定的对象才能使用,因此使用方法和C语言的函数指针不太一样 当然也可也借用该方法实现对私有函数的外部调用,因为只要使用对象强制取函数地 ...

  2. c++中的类成员函数指针

    c++中的类成员函数指针 文章目录 c++中的类成员函数指针 发生的事情 正常的函数指针定义 定义类的成员函数指针 std::function 发生的事情 最近,想用一个QMap来创建字符串和一个函数 ...

  3. boost源码剖析之:泛型函数指针类boost::function(rev#3)

    boost源码剖析之:泛型函数指针类boost::function(rev#3) 刘未鹏 C++的罗浮宫(http://blog.csdn.net/pongba)   Note: 并非新作,03年曾放 ...

  4. C++函数指针、函数对象与C++11 function对象对比分析

    1.函数指针 函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址.函数指针主要由以下两方面的用途:调用函数和用作函数参数. 函数指针的 ...

  5. 【Boost】boost库中function和bind一起使用的技巧(二)

    与 Boost.Function 一起使用 Boost.Bind 当我们把 Boost.Function 与某个支持参数绑定的库结合起来使用时,事情变得更为有趣.Boost.Bind 为普通函数.成员 ...

  6. 【Boost】boost库中function的用法

    要开始使用 Boost.Function, 就要包含头文件 "boost/function.hpp", 或者某个带数字的版本,从"boost/function/funct ...

  7. std::function简介

    1. 简介 std::function是一个函数对象的包装器,std::function的实例可以存储,复制和调用任何可调用的目标,包括: 函数. lamada表达式. 绑定表达式或其他函数对象. 指 ...

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

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

  9. C++11新特性之std::function std::bind

    std::function 在c++98&03时我们通常使用回调函数来处理一些需要某种场景下才触发的回调操作,但回调函数有一个限制就是它只能赋值给同类型的全局或者静态函数,对于其他有相同的返回 ...

最新文章

  1. TCGA收官之作—27篇重磅文献绘制“泛癌图谱”
  2. 设计进步,记一笔,控制层的代码,他不光控制还要校验数据!以前理解错啦
  3. 企业实战_10_MyCat Mysql 主复制总结
  4. 无法抗拒Minecraft给予超高的自由度和探索-微访谈
  5. 前端必知必会HTTP请求系列(一)了解Web及网络基础
  6. css按钮音效设置,带悬停音效(超低声波)的磁吸按钮
  7. mysql中where的用法_详解MySQL中WHERE子句的用法
  8. 在PHP网页中显示MySQL数据库内容
  9. JAVA中文件下载和文件批量下载方法
  10. matlab 二维离散傅立叶变换,二维离散傅里叶变换.PPT
  11. 基于c++图形化界面的clock页面置换算法
  12. 精油商城小程序,让您的品牌更出彩!
  13. 墨客科技执行董事袁英:MOAC区块链赋能实体产业的方案与实践
  14. Keil编译——warning:implicit declaration of function “XXXX“ is invalid in C99
  15. 30本Python学习参考书,从入门到大师全了!
  16. 如何为Apache JMeter开发插件(三)——冲破图片验证码的束缚
  17. 在pycharm2021.2中学习opencv图像处理,基于python3.9.7、pycharm完成配置
  18. 【.Net码农】c#打印机设置,取得打印机列表及相应打印机的所有纸张格式
  19. 专访黑客历史学家George Dyson
  20. Android应用安全现状与解决方案

热门文章

  1. 【Kaggle Learn】Python 5-8
  2. 补充cpusim图片
  3. 2022-2028年中国IT外包市场投资分析及前景预测报告
  4. java 手编线程池_死磕 java线程系列之自己动手写一个线程池
  5. 交情来自一系列的交易
  6. 解释为什么用梯度下降而不是直接求导数为0的解
  7. 分布式,集中式,云原生存储技术
  8. 深度学习到底有哪些卷积?
  9. 2021年大数据Spark(二十六):SparkSQL数据处理分析
  10. Python 修改终端输入字体颜色值