- 浏览: 1478141 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
参考:https://www.cnblogs.com/bencai/p/9124654.html
使用g++ -std=c++11 some.cpp 编译
c++的helloworld
function的用法
注意使用头文件<functional>
lambda
代替对象的成员函数,成员函数需要是public
结合bind的例子
placeholders的概念
关于bind的用法:
可将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。
调用bind的一般形式:auto newCallable = bind(callable,arg_list);
使用g++ -std=c++11 some.cpp 编译
c++的helloworld
#include <iostream> using namespace std; int main(int argc,char **argv) { cout<<"hello world!"<<endl; auto i=10; cout<<i<<endl; return 0; }
function的用法
注意使用头文件<functional>
#include <iostream> #include <functional> using namespace std; void printA(int a) { cout << a << endl; } int main() { std::function<void(int a)> func; func = printA; func(2); //2 printf("Hello world"); puts("Hello world"); cout << "Hello world" << endl; return 0; }
lambda
#include <iostream> #include <functional> using namespace std; void printA(int a) { cout << a << endl; } int main() { std::function<void()> func_1 = [](){cout << "hello world lamda" << endl;}; func_1(); //hello world cout << "Hello world" << endl; return 0; }
代替对象的成员函数,成员函数需要是public
#include <iostream> #include <functional> using namespace std; class Foo{ public: Foo(int num) : num_(num){} void print_add(int i) const {cout << num_ + i << endl;} int num_; }; int main() { std::function<void(const Foo&,int)> f_add_display = &Foo::print_add; Foo foo(2); f_add_display(foo,1); cout << "Hello world" << endl; return 0; }
结合bind的例子
placeholders的概念
关于bind的用法:
可将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。
调用bind的一般形式:auto newCallable = bind(callable,arg_list);
#include <iostream> #include <functional> using namespace std; class A { public: void fun_3(int k,int m) { cout<<k<<" "<<m<<endl; } }; void fun(int x,int y,int z) { cout<<x<<" "<<y<<" "<<z<<endl; } void fun_2(int &a,int &b) { a++; b++; cout<<a<<" "<<b<<endl; } int main(int argc, const char * argv[]) { //f1的类型为 function<void(int, int, int)> auto f1 = std::bind(fun,1,2,3); //表示绑定函数 fun 的第一,二,三个参数值为: 1 2 3 f1(); //print:1 2 3 auto f2 = std::bind(fun, placeholders::_1,placeholders::_2,3); //表示绑定函数 fun 的第三个参数为 3,而fun 的第一,二个参数分别由调用 f2 的第一,二个参数指定 f2(1,2);//print:1 2 3 auto f3 = std::bind(fun,placeholders::_2,placeholders::_1,3); //表示绑定函数 fun 的第三个参数为 3,而fun 的第一,二个参数分别由调用 f3 的第二,一个参数指定 //注意: f2 和 f3 的区别。 f3(1,2);//print:2 1 3 int n = 2; int m = 3; auto f4 = std::bind(fun_2, n,placeholders::_1); //表示绑定fun_2的第一个参数为n, fun_2的第二个参数由调用f4的第一个参数(_1)指定。 f4(m); //print:3 4 cout<<m<<endl;//print:4 说明:bind对于不事先绑定的参数,通过std::placeholders传递的参数是通过引用传递的,如m cout<<n<<endl;//print:2 说明:bind对于预先绑定的函数参数是通过值传递的,如n A a; //f5的类型为 function<void(int, int)> auto f5 = std::bind(&A::fun_3, a,placeholders::_1,placeholders::_2); //使用auto关键字 f5(10,20);//调用a.fun_3(10,20),print:10 20 std::function<void(int,int)> fc = std::bind(&A::fun_3, a,std::placeholders::_1,std::placeholders::_2); fc(10,20);//调用a.fun_3(10,20) print:10 20 return 0; }
发表评论
-
weak_ptr解决循环引用问题
2021-03-08 21:12 1174C++11引入的三种智能指 ... -
gcc链接顺序
2019-10-12 18:25 634代码在 https://github.com/killinux ... -
opengl的helloworld
2014-10-22 19:41 9031.我提供一个不需要配置环境就可运行的源码。 glut.h放在 ... -
画图板用c++实现和用js实现的websocket版本
2014-10-17 13:02 2130画图板 opencv的c++ #include <o ... -
c语言内存
2014-07-02 10:26 6951、C中内存分为五个区 栈:用来存放函数的形参和函数内的局部变 ... -
重定向stdout到文件
2014-03-05 18:37 5485把stdout重定向到文件 两种方法: 第一种方法没有恢复 ... -
通过nginx远程执行shell
2014-03-03 10:26 5087saltstack远程执行shell,远程管理等返回json已 ... -
c的urldecode
2014-02-28 18:22 1363#include <stdio.h> #in ... -
pthread的pthread_mutex_lock 的使用
2014-02-25 16:54 26146参考http://haoningabc.iteye.com/b ... -
c调用c++
2013-10-12 15:24 1178参考 http://www.cppblog.com/frank ... -
用C语言,实现接收管道输出的结果,并显示
2013-04-23 21:35 1947在shell里利用“|”管道干的事情就是io重定向,把“|”命 ... -
关于char * 与 char[]
2013-04-22 21:56 962问题引入: 在实习过程中发现了一个以前一直默认的错误,同样ch ... -
单向链表翻转
2012-12-25 23:41 1021临时笔记,创建一个链表 #include <stdl ... -
trie 树 的代码
2012-12-14 23:20 1141想起搜狐老大的一句话 看代码先看h文件,擦,当初感觉他这句话很 ... -
指针函数与函数指针的区别
2012-12-14 22:44 1198一、 1、指针函数是指带指针的函数,即本质是一个函数。函数返回 ... -
指针和数组
2012-11-14 22:40 1070转载http://kan.weibo.com/con/3512 ... -
js备份
2012-10-31 23:56 1726<!DOCTYPE HTML PUBLIC " ... -
线程的helloworld
2012-10-30 21:51 1605#include<stdio.h> #inc ... -
c的书籍
2012-10-30 10:56 1130http://www.acm.uiuc.edu/webmonk ... -
深入理解计算机系统第三章笔记 gcc
2012-10-24 12:11 1531随便写个最简单程序 然后gcc -S 看汇编 在gcc -C ...
相关推荐
C++里面的function是一个非常奇妙的东西,但是你想过他是如何实现的吗?作者在深刻理解了其中奥妙之后写就的精简版本。而且可以避免STL里面的function无法和Socket编程一起使用的问题——bind会无法正确解析。
c++11引入了std::bind及std::function,实现了函数的存储和绑定,即先将可调用的对象保存起来,在需要的时候再调用。定义了SignalObject信号类和SlotObject槽类,其中信号类中的 std::function(int)> _call就是要...
C++ 11 std::function和std::bind使用详解 C++ 11 中引入了两个重要的功能:std::function 和 std::bind,它们都是基于 C++ 11 的新特性,用于实现函数指针的功能。下面将详细介绍这两个功能的使用和区别。 std::...
C++0x引入了多项新特性,其中lambda表达式、std::function对象和bind机制是提升代码灵活性和可读性的重要工具。这三者之间的紧密联系在于它们都能在处理回调函数时提供便利。 1. **std::function** std::function...
结合lambda表达式、std::function和std::bind,C++11提供了一套强大的工具,使得编写简洁、灵活且高度封装的代码成为可能。这些特性简化了回调函数的处理,提高了代码的可读性和维护性,是现代C++编程不可或缺的部分...
C++11和C++14标准引入了一系列重要的新特性和改进,这些新特性旨在提高C++语言的现代化程度,增加编程的便捷性、效率与安全性。本篇教程将详细介绍C++11和C++14中新增的语法规则和特性,以及一些旧特性的弃用情况,...
<hello> pf = std::bind(&Test1::fun,t,2); pf(4); // return 0; } 输出的值是2,说明pf传进去的4并没有什么用,在bind的时候值已经绑定死了,但是pf()这样不给参数会报错。 如果我们想自定义参数,使用占位符,...
- std::function和std::bind:提供了更加灵活的函数调用方式。 - std::array和std::forward_list:引入了固定大小的数组容器和单向链表容器。 - shared_ptr和unique_ptr:提供了更安全的智能指针。 - 正则表达式...
### C++11 新特性与代码改进分析 #### 一、C++11 特性概览 ...通过利用 C++11 的新特性,如 `noexcept`、`std::bind` 和 `std::function`,可以更好地控制程序的行为,并使代码更容易扩展和维护。
通过std::function和std::bind,可以更方便地处理函数对象。完美转发的引入使得函数能够转发其参数的属性,进一步增强了模板编程的灵活性。 在标准库方面,C++11增加了std::array、std::forward_list等容器,并引入...
其中,`boost::bind`是Boost库中的一个关键组件,用于实现函数对象的绑定,它类似于C++11中的std::bind,但在C++98/03标准下非常有用。 `boost::bind`的主要功能是将函数或成员函数与部分参数预先绑定在一起,形成...
C++11引入了一系列新的关键字,这些关键字极大地增强了语言的表达能力和代码的可读性。 1. **`auto`**:`auto` 关键字允许编译器根据初始化表达式的类型自动推断变量的类型。这种类型推导不仅使得代码更加简洁,...
此外,STL算法中新增的函数对象如std::function和std::bind等,使得对函数的处理更加灵活。 C++11对STL中的迭代器也有所增强,提出了移动语义的概念,这有助于减少不必要的复制操作,提高了算法执行的效率。特别是...
在IT领域,Boost库是一个非常重要的C++工具集,它为C++标准库提供了许多扩展功能,其中`bind`和`function`是两个非常实用的工具。本文将深入探讨这两个概念以及如何在消息处理框架中使用它们。 首先,让我们了解`...
这样,我们就使用C++的`std::function`和`std::bind`实现了类似于C#中的委托和事件机制。这种方法虽然没有C#那样的语法糖,但依然能够提供功能强大的回调管理和事件通知。在实际项目中,这种机制可以用于实现如UI...
例如,`std::function`和`std::bind`可以用于创建可调用对象,这些对象可以表示任何函数或成员函数,从而简化了回调函数的管理。另外,C++11的右值引用和移动语义提高了代码的性能,使得函数对象的复制更加高效。在...
书中还深入探讨了Lambda表达式与C++标准库中的函数对象的关系,如`std::function`和`std::bind`。作者提醒读者,尽管`std::bind`在某些情况下仍然有用,但C++14和C++17引入的Lambda特性使得Lambda成为更现代、更推荐...
在C++标准库STL中,`std::bind`、`std::tuple`和`std::function`是三个非常重要的工具,它们各自有着独特的功能,同时也常常协同工作以完成复杂的功能。 1. `std::function`: 这是一个可以存储任何类型的可调用对象...
- function和bind:提供函数包装和参数绑定的功能。 - 智能指针(Smart pointers):包括unique_ptr、shared_ptr和weak_ptr,自动管理内存。 - 原子操作(Atomics):为并发编程提供原子操作。 - 强枚举(Strong...