binary_function的用处(转)
来源:互联网 发布:python unicode 去掉u 编辑:程序博客网 时间:2024/04/28 03:34
大多数情况,不需要用到binary_function!
如果你在定义一个二元的functor时,几乎可以不用管这个binary_function。但是如果你使用一些function adapter的时候就需要了,这其实是在实现一种concept.
比如,定义一个functor,用来给一个vector<double> push_back一个值
- C/C++ code
- struct inserter{public: void operator()(double n, vector<double> & v) { v.push_back(n); }};inserter f;vector<dobule> vd;f(1.0, vd);
现在,如果有一个算法,会往容器里追加一些值。例如这样的
- C/C++ code
- template<typename Functor>void append(Functor f){ double x; while(cin>>x) f(x);}
这时,你的insert就用不上了,因为append的functor只要求一个参数。如果你的inserter本来是一个很复杂的操作,那么如果重写一个就很麻烦。不过有一个简单的办法是再定义一个inserter_adapter
- C/C++ code
- template<typename Functor>struct inserter_adapter{ inserter_adapter(const Functor& f, vector<double>& v) :f_(f), v_(v) {} void operator()(double x) { f_(x, v_); } Functor f_; vector<double>& v_;};
那么在使用的时候就是下面这样。
- C/C++ code
- inserter f;vector<dobule> vd;inserter_adapter ia(f, vd);append(ia);
---------------------------------------
其实使用STL,你完全不用再写一个inserter_adapter,STL中有一个std::binder2nd的function adapter,作用和inserter_adapter一样,是把第二个参数绑定,让二元的函数对象变成一元的,就能符合只需要一个参数的算法。
但是前面定义的inserter这个函数对象不能直接用在std::binder2nd上,它还不符合std::binder2nd的concept。继承一下binary_function就搞定了。
- C/C++ code
- struct inserter :public std::binary_function<double, vector<double>&, void> //分别是第一个参数,第二个参数,返回值类型{public: void operator()(double n, vector<double> & v) { v.push_back(n); }};inserter f;vector<dobule> vd;inserter_adapter ia(f, vd);append(std::bind2nd(f, vd)); //bind2nd帮你创建了一个binder2nd对象
其实符合了binder2nd的concept,就意味着binder2nd知道了你的inserter需要什么样的参数类型,这样就可以帮你传递参数到你的inserter里面去了。
- binary_function的用处(转)
- binary_function
- [转]SuspendLayout()用处
- 从binary_function类继承的作用
- 从binary_function类继承的作用
- stl 中 std::binary_function 的使用
- stl中std::binary_function的使用
- 数学的用处(一)
- 数学的用处(二)
- [转]volatile 的作用和用处
- QQ各个文件的用处!【转】
- C# ?(问号)的三个用处
- 如何学习vc+(vc的用处)
- 算法的用处(转载自李开复)
- Servlet的用处(个人理解)
- ContentContainer的用处。
- route 命令的用处
- 醋的巨大用处
- memcache PHP 的 session.save_handler。
- 精通css 02 可视化格式模型
- 赶。。。
- 初学matlab——第三天
- 数据库专题
- binary_function的用处(转)
- 51CTO的传奇
- 最近很想学软件UI设计 不知道从何学起?
- WINCE Core/Pro/Pro plus各个版本区别
- 输入输出
- js写入Session,后台获取
- 模板方法模式
- php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
- struts2的标签