Young's Blog

包子铺

bind1st和bind2nd的实现

首先看一下下面几个辅助函数和结构体,它们是bind1stbind2nd的基础

1.unary_function
这个结构体负责对一元函数的描述:

unary_function


2.binary_function
这个结构体负责对二元函数的描述:

binary_function


3.binder1st类

binder1st

注意7~8行的op和value,分别用来保存绑定的函数操作和值。而在14~16行,可以看到这里直接使用op来处理value和__x参数。
从这两段代码可以看到,binder1st可以把二元函数间接变成一元函数(通过binder1st的operator()调用)。另外,14~15行的result_type、
second_argument_type和first_argument_type也意味着,如果我们自己要写一个可以由bind1st绑定的函数,那么最好是先从unary_function
和binary_function结构体中继承相应的traits,然后再实现operator()函数。

4.bind1st
bind1st函数实质上就是返回了一个binder1st类对象,注意看下面第7行代码:

bind1st

5.binder2nd和bind2nd
与binder1st和bind1st类似,只是使用Op调用的参数位置发生了变化而已

posted on 2011-01-09 16:29 Young 阅读(1834) 评论(0)  编辑 收藏 引用 所属分类: STL


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理