最近看到bind1st,感觉很好玩的一个模板函数。其定义如下:
于是,自己查资料,google,找到了一点线索。弄了半个明白。~
它的作用就是预先绑定一个参数,是二元算子变为一元(有些地方需要,比如,遍历容器中每个元素对其进行操作时,那参数肯定只有一个。)
我找到了两种方法,来实现这个绑定过程。一个是继承binary_function类,实现()操作符。这样就可以用此类的对象作为bind1st的第一个参数了。看定义也知道,它要求第一个参数有first_argument_type这个域。而binary_function结构体里包含有此域,其定义如下:
还有一种方法是使用pointer_to_binary_function进行转换,其定义如下:
好了,做个例子试试:
输出结果应该为:
好了,现在可以绑定一个参数了,到时候使用二元算子只需一个参数即可。差点忘了,还有一个问题,这只是绑定第一个参数。STL还是比较“明智”的,他当然也考虑到了有绑定第二个参数的情况,于是,你可以试试bind2nd~~
参考文章:
http://www.cnblogs.com/shootingstars/archive/2007/08/17/860042.html
http://blog.csdn.net/zxb_zxb/archive/2009/09/17/4563011.aspx