本节仅对无参的非成员函数绑定进行梳理,各部分也仅关注该情景的调用情况,后续陆续增加成员函数、绑定1参数,2参数的调用情况
1.boost::bind函数原型
template<class R> _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (), _bi::list0> BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) ())
{
typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) ();
typedef _bi::list0 list_type;
return _bi::bind_t<R, F, list_type> (f, list_type());
}
R:绑定函数的返回类型
该函数会返回一个bind_t对象,该类型重载了()运算法,并存储bind传递的函数和参数信息;
2.bind_t
F f_;//函数指针
L l_;//参数信息,对于无参绑定,保存在list0类型中
重载运算符操作:
其中result_type即为被绑定函数的返回类型,对应第一部分的R,从而使重载函数的返回类型同被绑定函数的返回类型一致;
result_type operator()()
{
list0 a;
BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
}
重载函数最终调用list0的函数
1.boost::bind函数原型
template<class R> _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (), _bi::list0> BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) ())
{
typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) ();
typedef _bi::list0 list_type;
return _bi::bind_t<R, F, list_type> (f, list_type());
}
R:绑定函数的返回类型
该函数会返回一个bind_t对象,该类型重载了()运算法,并存储bind传递的函数和参数信息;
2.bind_t
F f_;//函数指针
L l_;//参数信息,对于无参绑定,保存在list0类型中
重载运算符操作:
其中result_type即为被绑定函数的返回类型,对应第一部分的R,从而使重载函数的返回类型同被绑定函数的返回类型一致;
result_type operator()()
{
list0 a;
BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
}
重载函数最终调用list0的函数
template<