bind c++11

bind函数的使用详解

可以将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。
bind其实是一个模板参数:

template <class _Fx, class... _Types>
_NODISCARD _CONSTEXPR20 _Binder<_Unforced, _Fx, _Types...> 
bind(_Fx&& _Func, _Types&&... _Args) {
    return _Binder<_Unforced, _Fx, _Types...>
    (_STD forward<_Fx>(_Func), _STD forward<_Types>(_Args)...);
}

template <class _Ret, class _Fx, class... _Types>
_NODISCARD _CONSTEXPR20 _Binder<_Ret, _Fx, _Types...> 
bind(_Fx&& _Func, _Types&&... _Args) {
    return _Binder<_Ret, _Fx, _Types...>
    (_STD forward<_Fx>(_Func), _STD forward<_Types>(_Args)...);
}

基本函数和类的构造

class A
{
public:
	int print(int a)
	{
		cout << "print(int a)" << endl;
		return a;
	}
	static int printt(int a)
	{
		cout << "printt(int a)" << endl;
		return a;
	}
	static int num;
	int a=100;
};

int A::num = 100;

void  print(int a)
{
	cout << "print(int a)" << endl;
}

struct B
{
	int operator()(int a)
	{
		cout << "operator(int a)" << endl;
		return a;
	}
};

bind对普通函数的构造

auto func = bind(print, placeholders::_1);//这个placeholders是作用域对象
//_1表示的是这是一个可变的参数如果填了值则表示这个值一定
func(10);

bind对类静态的函数的使用

auto func1 = bind(A::printt,placeholders::_1);//类的静态函数不需要指定类,因为他的地址是不在类中的,在静态全局区

func1(12);

bind对类成员变量的访问

auto func2 = bind(&A::a,a);//当你是要一个类的成员函数或变量时就需要指定这个类的对象

cout << func2() << endl;

bind对类的普通函数的访问

auto func3 = bind(&A::print, a, placeholders::_1);

cout << func3(12) << endl;

bind对类仿函数的访问

auto func4 = bind(b, placeholders::_1);//这个b是一个类对象,相当于绑定了这个类对象的,再去访问operator()
()这个函数

cout << func4(122) << endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值