您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

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;

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进