博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数指针&绑定: boost::functoin/std::function/bind
阅读量:4638 次
发布时间:2019-06-09

本文共 1805 字,大约阅读时间需要 6 分钟。

see link

function vs template:

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

用处就是能够使用一个函数指针调用不用的函数实体(仅仅要他们的signature一样),实现回调函数。或者多种不同的算法等等。

关于 std::function的实现。 see link:
非常好的样例:

#include 
#include
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

你可能感兴趣的文章
【MySQL】Win7下修改MySQL5.5默认编码格式
查看>>
AI之路,第二篇:python数学知识2
查看>>
python网络编程:socket套接字
查看>>
SQL serve创建与调用存储过程
查看>>
windows10关闭更新,windowsUpdate禁用无效 windows无限重启 一分钟无限重启 win10无法连接到SENS服务...
查看>>
[LeetCode] Alien Dictionary
查看>>
[LintCode] 空格替换
查看>>
React16 新特性
查看>>
单元测试工具 - karma
查看>>
JSSDK微信支付封装的支付类方法,代码比较齐全,适合收藏
查看>>
Java线程及Jvm监控工具
查看>>
Blutooth MESH
查看>>
PHP用curl发送get post put delete patch请求
查看>>
如何在ecplise中配置maven以及ecplise访问本地仓库
查看>>
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
查看>>
分库使用的一些命令
查看>>
Android 4.4.2上与BLE 蓝牙锁设备的通讯
查看>>
[ASP] asp对数据库的基本操作
查看>>
内存管理笔记(分页,分段,逻辑地址,物理地址与地址转换方式)
查看>>
JAVA 整数的储存
查看>>