首页 > 代码库 > C++ lamda、function、bind使用
C++ lamda、function、bind使用
参考资料:
http://blog.csdn.net/augusdi/article/details/11771699
- lambda 表达式的简单语法如下:[capture] (parameters) -> return value { body }
其中[capture]可以选择如下的不同形式:
使用示例:
- function
std::function对象是对C++中现有的可调用实体的一种类型安全的包裹,std::function 使用
- bind
std::bind是这样一种机制,它可以预先把指定可调用实体的某些参数绑定到已有的变量,产生一个新的可调用实体,这种机制在回调函数的使用过程中也颇为有用。 C++0x中,提供了std::bind,它绑定的参数的个数不受限制,绑定的具体哪些参数也不受限制.
注:
对于不事先绑定的参数,需要传std::placeholders进去,从_1开始,依次递增。placeholder是pass-by-reference的占位符。
- 综合示例:
1、EmailProcessor.h#pragma once#include <functional>#include <string>using namespace std;class EmailProcessor{ private: function<void (const string&)> _handle_func; public: void receiveMessage(const string& str) { if(_handle_func) { _handle_func(str); } } void setHandlerFunc(function<void (const string&)> func) { _handle_func=func; }};
2、MessageStored.h#pragma once#include <string>#include <vector>#include <iostream>using namespace std;class MessageStored{ private: vector<string> _store; bool find(const string& str,const string& key) { return [&](){ size_t pos=str.find(key); return pos!=string::npos && str.substr(pos)==key; }(); } public: bool checkMessage(const string& str) { for(auto iter=_store.begin(),end=_store.end(); iter!=end;iter++) { if(find(str,*iter)) { cout<<"Sending Msg "<<str<<endl; return true; } } cout<<"no match email"<<endl; return false; } void addMsgStore(const string str) { _store.push_back(str); }};
3、main.cpp#include "EmailProcessor.h"#include "MessageStored.h"#include <iostream>using namespace std;int main(){ MessageStored stored; string mails[]={"@163.com","@qq.com","@gmail.com"}; for(string str:mails) { stored.addMsgStore(str); } EmailProcessor processor; auto func=std::bind(&MessageStored::checkMessage,stored,placeholders::_1); processor.setHandlerFunc(func); processor.receiveMessage("xxx@gmail.com");}
注:
&MessageStored::checkMessage是获取类成员函数的地址
C++ lamda、function、bind使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。