std::bind接口与实现
前言 最近想起半年前鸽下来的Haskell,重温了一下忘得精光的语法,读了几个示例程序,挺带感的,于是函数式编程的草就种得更深了。又去Google了一下C++与FP,找到了一份 近乎完美的讲义 ,然后被带到C++20的ranges library,对即将发布的C++20满怀憧憬。此时,我猛然间意识到,看别人做,觉得自己也能做好,在游戏界叫云玩家,在编程界就叫云程序员啊! 不行,得找点事干。想起同样被我鸽了很久的 <functional> 系列,刚好与函数式编程搭点边,就动笔写吧!这就是本文的来历。 找来GCC 8.1.0的标准库,在 <functional> 中找到了 std::bind 的实现。花了好长时间终于读懂了,原来 std::bind 的原理一点都不复杂。此外, std::bind 的实现依赖于 std::tuple ,本文理应从后者开始讲起,但是又看了看 <tuple> 的长度和难度,写 std::tuple 未免喧宾夺主了。所以,本文将聚焦于 std::bind 的实现,其他标准库组件就当现成的来用了。 接口 你能点开这篇文章,说明你一定明白 std::bind 是干什么用的,以及应该怎么用,我就不赘述了。简而言之, std::bind 用于给一个可调用对象绑定参数。可调用对象包括函数对象(仿函数)、函数指针、函数引用、成员函数指针和数据成员指针