std::function,std::bind复习

#include <iostream>
#include <functional>//std::bind返回函数对象
void fun1(int a, int b)
{
    std::cout << a << b << std::endl;
}
using namespace std::placeholders;

class A
{
public:
    void fun2(int a, int b)
    {
        std::cout << a << b << std::endl;
    }
};
int main()
{
    //第一种用法,直接绑定实参
    std::bind(fun1, 1, 2)();//调用时把1,2的拷贝作为实参传递给fun1,bind中绑定的参数必须与fun1调用的参数个数相同,参数将会传递给fun1作为入参

    //占位符_1的用法,在函数调用时才接受正真的参数
    std::bind(fun1, _2, _1)(1, 2);//占位符的名字表示在调用式中顺序,这个表示fun1(2, 1)

    //绑定成员函数
    A a;
    std::bind(&A::fun2, a, _1, _2)(3, 4);//需要传递类似this指针的东西让这个函数对象调用&必须加

    //functon用法,这个最多的用法可以存储bind返回的结果,在以后再需要的时候回调,是一种回调机制
    std::function<void(int, int)> func;//function可以存储函数指针对象,之前以为只能存储std::bind
    func = fun1;
    func(5, 6);

    //function调用成员函数
    //1.在function中写类名称
    std::function<void(A&, int, int)> fun1;//可以赋值int,int返回为void的成员函数
    fun1 = std::bind(&A::fun2, _1, _2, _3);
    fun1(a, 8, 9);
    //2.在bind里面写类实例,这种方式比较多
    std::function<void(int, int)>fun2;
    fun2 = std::bind(&A::fun2, a, _1, _2);
    fun2(9, 10);

    getchar();
    return 0;
}

std::function,std::bind复习,布布扣,bubuko.com

时间: 2024-10-09 21:21:25

std::function,std::bind复习的相关文章

c++11——std::function和bind绑定器

c++11中增加了std::function和std::bind,可更加方便的使用标准库,同时也可方便的进行延时求值. 可调用对象 c++中的可调用对象存在以下几类: (1)函数指针 (2)具有operator()成员函数的类对象(仿函数) (3)可被转换为函数指针的类对象 (4)类成员(函数)指针 void func(void){ //.... } struct Foo{ void operator()(void){ //... } }; struct Bar{ using fr_t = vo

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::function和bind绑定器

一.std::function C++中的可调用对象虽然具有比较统一操作形式(除了类成员指针之外,都是后面加括号进行调用),但定义方法五花八门.为了统一泛化函数对象,函数指针,引用函数,成员函数的指针的各种操作,让我们可以按更统一的方式写出更加泛化的代码,C++11推出了std::function. std::function是可调用对象的包装器.它是一个类模板,可以容纳除了类成员(函数)指针之外的所有可调用对象.通过指定它的模板参数,它可以用统一的方式处理函数,函数对象,函数指针,并允许保存和

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++中的仿函数,std::function和bind()的用法

1.仿函数:又叫std::function,是C++中的一个模板类 2.C语言中的函数指针: int  add(int a,int b) { return a+b; } typedef int (*func)(int,int);//给函数类型定义别名 func func1; func1=add;//给函数指针初始化 或者int (*func1)(int,int)=add; 函数指针的好处: 假设有10个函数:add,sub,mul,div,...如果采用普通的switch()  case: sw

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 {

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是这样一种机制,它可以预先把

2.cocos2dx 3.2中语法的不同之处,lambada表达式的使用和function和bind函数的使用

1        打开建好的T32  Cocos2dx-3.2的一个项目 2        设置Cocos显示窗口的位置是在AppDelegate.cpp中: 3  设置自适应窗口大小的代码是在上面的代码后面紧接着就添加: glview->setDesignResolutionSize(480,320, ResolutionPolicy::EXACT_FIT); 3        cocos2d-x-3.2项目案例(3.2版本之后都去掉了CC前缀) 4        项目目录结构如下: 编写公共

2.cocos2dx 3.2在语法的差异,lambada使用表达式和function和bind使用功能

1        打开 - 内置T32  Cocos2dx-3.2一个专案 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 2        设置Cocos显示窗体的位置是在AppDelegate.cpp中: 3  设置自适应窗体大小的代码是在上面的代码后面紧