织梦CMS - 轻松建站从此开始!

罗索

Boost.Range:试用Range Adaptors

落鹤生 发布于 2011-03-11 22:22 点击:次 
试用RangeEx扩展
TAG:

1.

  1. #include <iostream>     
  2. #include <vector>     
  3. #include <boost/assign.hpp>     
  4. #include <boost/range/adaptor/transformed.hpp>     
  5. #include <boost/spirit/include/karma.hpp>     
  6.     
  7. using namespace std;     
  8. using namespace boost::adaptors;     
  9. using namespace boost::assign;     
  10. namespace karma = boost::spirit::karma;     
  11.     
  12. int f(int x) {return x + 1;}
  13.  
  14. struct X
  15. {
  16.     typedef int result_type;
  17.     int operator()(int x) const {return x + 1;}
  18. };
  19.  
  20. int main()
  21. {
  22.     vector<int> v;
  23.     v += 1,2,3,4,5;
  24.     auto v2 = v | transformed(f);
  25.     cout << karma::format(karma::auto_ % ',' << '\n', v2);
  26.     auto v3 = v | transformed(X());
  27.     cout << karma::format(karma::auto_ % ',' << '\n', v3);
  28.     return 0;
  29. }
  30. //2,3,4,5,6
  31. //2,3,4,5,6

2.

  1. #include <iostream>    
  2. #include <vector>    
  3. #include <boost/assign.hpp>    
  4. #include <boost/range/adaptor/transformed.hpp>    
  5. #include <boost/lambda/lambda.hpp>    
  6. #include <boost/spirit/include/phoenix.hpp>    
  7. #include <boost/spirit/include/karma.hpp>    
  8. #include <boost/function_types/result_type.hpp>     
  9.     
  10. using namespace std;     
  11. using namespace boost::adaptors;     
  12. using namespace boost::assign;     
  13. namespace karma = boost::spirit::karma;     
  14.     
  15. template<typename F>      
  16. struct result_type_wrapper : boost::function_types
  17. ::result_type<decltype(&F::operator())>     
  18. {     
  19. };     
  20.     
  21. template<typename F>      
  22. struct adaptable_wrapper : F     
  23. {     
  24.     typedef typename result_type_wrapper<F>::type result_type;     
  25.     //typedef typename boost::function_types::
  26. result_type<decltype(&F::operator())>::type result_type;     
  27.     
  28.     adaptable_wrapper(F f) : F(f) {}     
  29. };     
  30.     
  31. template<typename F>     
  32. adaptable_wrapper<F> make_adaptable(F f)     
  33. {  
  34.     return adaptable_wrapper<F>(f);  
  35. }  
  36.  
  37. int main()  
  38. {  
  39.     vector<int> v;  
  40.     v += 1,2,3,4,5;  
  41.  
  42.     //auto v2 = v | transformed(boost::phoenix::arg_names::_1 + 1); // error  
  43.     //auto v3 = v | transformed(boost::lambda::_1 + 1);             // error  
  44.     //auto v4 = v | transformed([](int x){return x + 1;});          // error  
  45.  
  46.     auto v5 = v | transformed(make_adaptable([](int x){return x + 1;}));  
  47.     cout << karma::format(karma::auto_ % ',' << '\n', v5);  
  48.     return 0;  
  49. }  
  50. //2,3,4,5,6  

 

(zwvista)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201103/11058.html]
本文出处:CSDN博客 作者:zwvista
顶一下
(0)
0%
踩一下
(1)
100%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容