Chinaunix首页 | 论坛 | 博客
  • 博客访问: 559221
  • 博文数量: 104
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1559
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-21 00:58
个人简介

锻炼精神,首先要锻炼肉体

文章分类

全部博文(104)

文章存档

2018年(1)

2016年(1)

2015年(101)

2014年(1)

我的朋友

分类: C/C++

2015-05-10 12:24:07

这篇文章通过一个例子来简单介绍一下 boost 中 pair  转换为 map 的方法,具体的细节和注释稍后整理 

为了方便调试代码,我将
所有的 class 写到了一个文件中
编程环境 :实例代码
点击(此处)折叠或打开
  1. #include <boost/fusion/include/vector.hpp>
  2. #include <boost/fusion/mpl.hpp>
  3. #include <boost/mpl/transform.hpp>

  4. #include <boost/fusion/include/map.hpp>
  5. #include <boost/fusion/include/at_key.hpp>
  6. #include <boost/fusion/include/pair.hpp>
  7. #include <boost/fusion/adapted/mpl.hpp>
  8. #include <boost/fusion/include/mpl.hpp>
  9. #include <boost/mpl/vector.hpp>
  10.  
  11. #include <boost/shared_ptr.hpp>

  12. #include <cstdio>
  13. #include <string>
  14. #include <cstdlib>
  15. #include <iostream>

  16. class obj1
  17. {
  18. public :

  19.     obj1( std::string name )
  20.     {
  21.         std::cout <<"create "<< name << std::endl ;
  22.         _name = name ;
  23.         
  24.     }

  25.     void print ()
  26.     {
  27.         std::cout<<"print " << _name <<std::endl ;
  28.     }
  29.     
  30. private :
  31.     std::string _name ;
  32. } ;

  33. class obj2
  34. {
  35. public :
  36.     obj2( std::string n )
  37.     {
  38.         std::cout <<"create "<<n << std::endl ;
  39.         name = n ;
  40.     }
  41.     void print ()
  42.     {
  43.         std::cout <<"print "<< name <<std::endl ;
  44.     }
  45.     
  46. private :
  47.     std::string name ;
  48. } ;

  49. class obj3
  50. {
  51. public :
  52.     obj3( std::string n )
  53.     {
  54.         std::cout <<"create "<<n<< std::endl ;
  55.         name = n ;
  56.     }

  57.     void print ()
  58.     {
  59.         std::cout<<"print " << name <<std::endl ;
  60.     }
  61.     
  62. private :
  63.     std::string name ;
  64. } ;

  65. typedef boost::mpl::vector <obj1, obj2,obj3> CacheableTypes ;

  66. template <typename T>
  67. class sharedptr
  68. {
  69. public :
  70.     typedef boost::shared_ptr<T> type ;
  71. } ;

  72.      struct MakePair
  73.     {
  74.         template <typename T>
  75.         struct apply
  76.         {
  77.             typedef boost::fusion::pair<T, typename sharedptr<T>::type > type ;
  78.         } ;
  79.     } ;

  80. typedef boost::mpl::transform<CacheableTypes , MakePair>::type CachePair_t ;
  81. typedef boost::fusion::result_of::as_map<CachePair_t>::type CacheMap_t ;




  82. int main ()
  83. {
  84.     namespace fusion = boost::fusion ;
  85.     namespace mpl = boost::mpl ;

  86.     CacheMap_t mMap ;

  87.     //obj1 o1("Aimer") ;
  88.     //obj2 o2("Kokia") ;
  89.     //obj3 o3("Rurutia") ;

  90.     fusion::at_key<obj1>(mMap) = sharedptr<obj1>::type ( new obj1("obj1->Aimer")) ;
  91.     sharedptr<obj1>::type p = fusion::at_key<obj1>(mMap) ;
  92.     p->print() ;

  93.     fusion::at_key<obj1>(mMap) = sharedptr<obj1>::type (new obj1("obj1->Kokia")) ;
  94.     fusion::at_key<obj2>(mMap) = sharedptr<obj2>::type (new obj2("obj2->rurutia")) ;
  95.     fusion::at_key<obj3>(mMap) = sharedptr<obj3>::type (new obj3("obj3->inuyasha")) ;
  96.     
  97.     p = fusion::at_key<obj1>(mMap) ;
  98.     p->print() ;

  99.     system("pause") ;
  100.     return 0 ;
  101. }

代码在线连接:
end
阅读(2258) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~