std::bind 重载绑定

//普通函数重载绑定
void print1()
{
std::cout << "non args \n";
}

void print1(int v)
{
std::cout << "arg value is " << v << std::endl;
}

std::function<void()> fn = std::bind((void (*)())print1);
fn();

std::function<void(int v)> fn1 = std::bind((void(*)(int v))print1, std::placeholders::_1);
fn1(10);

//成员函数重载绑定
class A
{
public:
void print1()
{
std::cout << "mem fn: --- non args\n";
}

void print1(int v)
{
std::cout << "mem fn: --- arg value is " << v << std::endl;
}
};

A a;
std::function<void (A*)> mem_fn = std::bind((void(A::*)())&A::print1, std::placeholders::_1);
mem_fn(&a);

std::function<void (A*, int v)> mem_fn1 = std::bind((void(A::*)(int v))&A::print1, std::placeholders::_1, std::placeholders::_2);
mem_fn1(&a, 10);

时间: 2024-12-17 09:46:07

std::bind 重载绑定的相关文章

std::bind接口与实现

前言 最近想起半年前鸽下来的Haskell,重温了一下忘得精光的语法,读了几个示例程序,挺带感的,于是函数式编程的草就种得更深了.又去Google了一下C++与FP,找到了一份近乎完美的讲义,然后被带到C++20的ranges library,对即将发布的C++20满怀憧憬.此时,我猛然间意识到,看别人做,觉得自己也能做好,在游戏界叫云玩家,在编程界就叫云程序员啊! 不行,得找点事干.想起同样被我鸽了很久的<functional>系列,刚好与函数式编程搭点边,就动笔写吧!这就是本文的来历. 找

std::bind和std::function

std::bind 用于绑定一个函数,返回另外一种调用方式的函数对象 ,可以改变参数顺序 和个数 std::function 用于构建一个函数特别是 回调函数  ,用于替代 函数指针/*常和匿名函数一起用回调*/ 参考以下代码 #include<iostream> #include "functional" using namespace std; double calculate(double x, double y, char op) { switch (op) { c

STL C++ std::bind操作例子,仿函数操作配合算法库操作

1.stl::bind 和std::mem_fun_ref系列的配合使用出现了问题,多参形式不知道如何组织.适配器的操作真心难受!!!只能迷迷糊糊地用着.要使用非质变算法时需要作用于容器时只能考虑lambda或者transfer操作.待续 // functor-adapter_p431.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <algorithm>//元素操作算法 #include <functiona

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::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;

浅谈std::bind的实现

bind这个东西争议很多,用起来很迷,而且不利于编译优化,很多人都推荐用lambda而非bind.简单说,bind就是通过库抽象实现了lambda里需要写进语言标准的东西,变量捕获,参数绑定,延迟求值等.但是以此带来的缺陷就是,虽然bind生成的可调用对象的结构是编译期确定的,但是它的值,尤其是被调用的函数,全部是在运行期指定的,并且可调用对象也只是一个普通的类,因此很难进行优化.除此之外,标准库的bind实现,只提供了20个placeholder进行参数绑定,无法扩展,这也是实现的一个坑.因此

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.

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 <

std::bind

参考资料 • cplusplus.com:http://www.cplusplus.com/reference/functional/bind/ std::bind简介 • 函数模板声明 // cplusplus.com // simple(1) template <class Fn, class... Args>/* unspecified */ bind (Fn&& fn, Args&&... args); // with return type (2)te