c++11之std::bind和function

  • 基本测试代码
      1. #include<iostream>
      2. #include<functional>
      3. void func(void)
      4. {
      5. std::cout << __FUNCTION__ << std::endl;
      6. }
      7. void callback(std::function<int(int,char*)> fr)
      8. {
      9. fr(1,"gdg");
      10. }
      11. int strlength(int n,constchar* str)
      12. {
      13. return n + strlen(str);
      14. }
      15. void outPut(int x,int y)
      16. {
      17. std::cout << x <<" "<< y << std::endl;
      18. }
      19. int main()
      20. {
      21. //测试bind
      22. auto fr = std::bind(strlength, std::placeholders::_1, std::placeholders::_2);
      23. //function作为函数参数
      24. callback(fr);
      25. std::bind(strlength,1,"hhha")();
      26. std::bind(strlength, std::placeholders::_1,"hha")(45);//第一个参数从外面传入,第二个参数已经设置好了
      27. std::bind(strlength,23, std::placeholders::_1)("lallaa");//bind里按照函数的参数顺序来
      28. std::bind(strlength, std::placeholders::_2, std::placeholders::_1)("hhafdsf",25);//第一个参数用传入的第二个参数,第二参数用传入的第一个参数
      29. std::bind(strlength, std::placeholders::_1, std::placeholders::_3)(12,45,"fhsafdf");//对,第二个参数没用到
      30. }

来自为知笔记(Wiz)

时间: 2024-10-07 05:06:58

c++11之std::bind和function的相关文章

C++11之std::bind感悟

之前查询资料时发现使用std::bind可以很好的实现设计模式之中的观察者模式. 但所调用bind绑定的函数比较难实现继承.使用多级指针实现继承. 示例代码如下: 编译环境:VS2017 1 #include "pch.h" 2 #include <iostream> 3 #include <vector> 4 #include <functional> 5 class Base 6 { 7 public: 8 virtual void printM

C++11新特性应用--实现延时求值(std::function和std::bind)

说是延时求值,注意还是想搞一搞std::function和std::bind. 之前博客<C++11新特性之std::function>注意是std::function怎样实现回调函数. 如今就算是补充吧,再把std::bind进行讨论讨论. 何为Callable Objects? 就可以调用对象,比方函数指针.仿函数.类成员函数指针等都可称为可调用对象. 对象包装器 Function wrapper Class that can wrap any kind of callable eleme

C++ std::bind

C++11的std::bind是个巨大的进步,把各种稀奇古怪的函数对象统一起来.古老的bind1st终于退出历史舞台.但是bind仍旧存在漏洞.例如: #include <iostream> #include <cmath> #include <functional> // std::bind using namespace std::placeholders; // adds visibility of _1, _2, _3,... double bevel(doub

c++11特性与cocos2d-x 3.0之std::bind与std::function

昨天同事让帮忙写一小功能,才发现cocos2d-x 3.0 和 cocos2d-x 3.0rc0 差别还是相当大的. 发现Label这一个控件,3.0就比rc0版本多了一个创建函数,更为关键的是3.0内的Label锚点是在ccp(0.5,0.5),而一直3.0rc0是ccp(0,0). 累觉不爱.尽管cocos2d-x改变太快,兼容性一次次的暴露出不足,但是,总归是向好的方向进行.于是下载了3.0来玩玩~ cocos new 出新的项目之后,仔细阅读代码,才发现了一句3.0区别于2.0的代码:

C++ 11 std::function std::bind使用

cocos new 出新的项目之后,仔细阅读代码,才发现了一句3.0区别于2.0的代码: auto closeItem = MenuItemImage::create( "CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); 2.0内的代码用的不是CC_CALLBACK_1而是menu_selector. CC_CALLBACK系列是3.

C++11学习笔记之三lamda表达式,std::function, std::bind

//lamda //first lamda [] {}; // second lamda []() //or no need () when paramater is null { std::cout << "second" << std::endl; }();// last add(), express will call this lamda func // 3 with return type auto kkk = []() { return 1; }()

C++11 std::bind std::function 高级使用方法

从最基础的了解,std::bind和std::function /* * File: main.cpp * Author: Vicky.H * Email: [email protected] */ #include <iostream> #include <functional> #include <typeinfo> #include <string.h> int add1(int i, int j, int k) { return i + j + k;

c++ 11学习笔记--Lambda 表达式(对比测试Lambda ,bind,Function Object)

所有c++ coder都应该为这个语法感到高兴,说的直白一点,Lambda 表达式就是函数对象的语法糖. 还是直接看对比栗子吧,抄袭的是msdn的官网 该示例使用 for_each 函数调用中嵌入的 lambda 向控制台打印 vector 对象中的每个元素是偶数还是奇数. 使用lambda #include <algorithm> #include <iostream> #include <vector> using namespace std; int main()

std::function 和 std::bind

可调用对象 是一个函数指针 是一个具有operator()成员函数的类对象(仿函数) 是一个可被装换为函数指针的类对象 是一个类的成员(函数)指针 void func() { } struct Foo { void operator()(void) { } }; struct Bar { using fr_t = void(*)(void); static void func(void) { } operator fr_t(void) { return func; } }; struct A {