Lig*_*ica 4 c++ std boost-bind
在谈话期间boost::bind,有人注意到它std::bind1st存在于C++ 03中,但它"几乎无法使用".
我找不到任何可靠的支持.
boost :: bind是标准函数std :: bind1st和 std :: bind2nd的泛化.它支持任意函数对象,函数,函数指针和成员函数指针,并且能够将任何参数绑定到特定值或将输入参数路由到任意位置.bind不对函数对象提出任何要求; 特别是,它不需要 result_type,first_argument_type和 second_argument_type标准typedef.
或许暗示这些限制确实适用于std::bind1st.
比对参数的数目明显的限制,还有什么是优势boost::bind,以std::bind1st/ std::bind2nd?std::bind1st在C++ 03中"几乎无法使用" 的断言是否有任何优点?
如果我们看一下C++ 03 20.3.6.1和20.3.6.2,那么我们看到,对于functor参数,bind1st我们需要三个typedefs(对于结果类型,第一个和第二个参数),并且只有结果运算符有一个论点.
这意味着我们不能简单bind1st地使用普通函数指针,因为它们没有那些typedef.此外,我们只能使用bind1st二进制函数,因为我们不支持更多参数.此外,boost::bind et al具有能够重新排序参数的优点,当然还支持不仅仅是第一个.
在我看来,绑定器的大多数用例是自由函数和成员函数,而不是函子对象; 因此,使用bind1st非常有限(虽然可以通过使用其他工具进行扩展ptr_fun,但是这是否使其更有用)是值得怀疑的.当然,这只是基于个人经验,但有人可能想要为其执行Google代码搜索统计bind1st.