[C/C++11]_[初级]_[std::bind介绍和使用]
2017-01-20 14:01
246 查看
场景
1.C++11 引入了std::function 对象, 这个对象可以通过std::bind封装所有的函数, 并通过代理调用这个std::function的方式调用这个函数. 比如通过统一的方式调用不定参数个数的函数. 这对实现代理模式等设计模式帮助是很大的.说明
1.cppreference 上的使用例子我就不多说了, 除了可以用在标准库上, 也是可以用在自己设计带代码结构里. 和boost.bind,
boost.function基本一样.
2.以下例子说明如何封装线程函数, 可以指定任意个数参数的函数作为线程执行函数, 和
std::thread类似.
// test-bind.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <Windows.h> #include <iostream> #include <functional> #include <memory> void CountLine(const std::wstring& path) { std::cout << (int*)&path << std::endl; std::wcout << path.c_str() << std::endl; } void AddNumber(int a,int b,long* sum) { *sum = a+b; } class MyThread { public: MyThread(std::function<void()> func) { func_ = func; } static DWORD WINAPI ThreadFunc1(LPVOID param) { std::function<void()>& func = *(std::function<void()>*)param; func(); return 0; } void Run() { thread_ = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) ThreadFunc1, (LPVOID)&func_, 0, NULL); WaitForSingleObject(thread_, INFINITE); } HANDLE thread_; std::function<void()> func_; }; MyThread* DoTask1() { std::wstring path(L"C:\\p"); std::cout << (int*)&path << std::endl; CountLine(path); auto thread = new MyThread(std::bind(CountLine,path)); return thread; } MyThread* DoTask2(long* sum) { auto thread = new MyThread(std::bind(AddNumber,1,2,sum)); thread->Run(); return thread; } int _tmain(int argc, _TCHAR* argv[]) { auto thread = DoTask1(); thread->Run(); long sum = 0; thread = DoTask2(&sum); thread->Run(); std::cout << sum << std::endl; return 0; }
输出:
003DFC84 003DFC84 C:\p 005183F8 C:\p 3
参考
以boost::function和boost:bind取代虚函数std::bind
std::function
相关文章推荐
- 8、泛型程序设计与c++标准模板库2.5容器适配器
- c语言基础语法三——数组
- C++学习笔记
- ASSIC表对照表
- C++——KMP模板
- c/c++混合编程Makefile范例
- c++ Primer Plus(第六版)第十二章习题,写代码之路
- 第七届蓝桥杯大赛个人赛省赛(软件类)真题 C语言A组 1
- 1.The Graphics View Architecture(图形视图框架)
- pat-bl-1028
- 基于ANT+通讯协议软件开发环境搭建
- C++中产生随机整数的方法(srand()函数与rand()函数)
- 反转串
- (c++)编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。
- c++ Primer Plus(第六版)第十章习题,写代码之路
- C++文件读写详解(ofstream,ifstream,fstream)
- c++ code blocks 配置 mysql5.7
- c语言数组名解释
- c++ Primer Plus(第六版)第八章习题,写代码之路
- C++之 类型定义语句--typedef