简介
binder2nd是一个函数适配器,这篇文章想通过一个函数调用对这个adapter进行详细的分析。
分析
我们的主函数是一条语句,计算数组中比50小的元素个数。
|
|
上面这段代码中count_if是主角,因此对它先进行下研究。
|
|
注意到pred应该是一个函数对象,要能够对参数*first进行判断。其返回类型是difference_type定义了一长串。
首先看下less模板
|
|
less模板继承了二元function,因此有了三个类型名,可以回答算法的提问。less
先看看bind2nd的源代码:
|
|
毫无疑问bind2nd是一个函数模板,在调用该函数时首先进行函数模板参数推断,得到operation就是less
|
|
在上述类模板中有一个构造函数分别对对象的op与value进行了赋值,这样就构建了一个可调用的函数对象,也就是count_if中的pred。注意其返回值是typename Operation::result_type即bool类型的,与其对应。
总结
应该说这个函数调用关系还是比较复杂的,复杂的原因是让设计更简单,便于代码重复使用。只要慢慢弄懂每个对象的含义,整体的感觉是设计还是很精妙的。
声明
若有错误,欢迎讨论。严禁抄袭,仅用于学习。