posts - 58,  comments - 75,  trackbacks - 0
       Signal会安优先级的不同来调用不同组的slot。这样要求signal能根据不同的优先级来管理slot组。典型的实现方法是用std::map。将其定义为如下形式std::map< int, slot >。由于每个优先级下可能有一组slot,所以要将这一组slot组织到一起管理,在boost signal中使用std::list来管理,其可能的形式大体如下std::list< slot >。这样就要修改刚才定义的map了,修改后的map可能的定义如下std::map< int, std::list< slot > >

      在实际的boost signal中并没有直接的存储slotboost signal库中有个slot类),而是存储了functionboost function类的对象)对象。而且为了方便控制signalfunction之间的联系,引入了connection类,用来表示signalfunction之间的联系。Connection的对象当然和一个function放在了一起。这样boost signal提供了一个connection_slot_pair类来存储一个functionconnection对。这样在boost signal中一个slot组的实际定义如下std::list< connection_slot_pair >。并且被重定义为group_list类型(typedef std::list<connection_slot_pair> group_list)。相应的在boost signalmap的实际定义如下std::map<stored_group, group_list, compare_type>,并且被重定义为slot_container_typetypedef std::map<stored_group, group_list, compare_type> slot_container_type)。将以上的这些东西组织到一个类中,以便于管理。这个类就是named_slot_mapSignal中真正用来管理slot的管理器。

         Named_slot_map的类数据成员如下定义(boost源码中的一部分,数据成员部分)

 

class BOOST_SIGNALS_DECL named_slot_map

{

public:

typedef named_slot_map_iterator iterator;//named_slot_map容器的迭代器

private:

typedef std::list<connection_slot_pair> group_list;//function connection对组类型

typedef std::map<stored_group, group_list, compare_type> slot_container_type;//容器类型

typedef slot_container_type::iterator group_iterator;//容器迭代器类型

typedef slot_container_type::const_iterator const_group_iterator;

 

slot_container_type groups;//定义一个用来管理function connection组的容器对象

group_iterator back;//容器的迭代器对象

};

 

         Named_slot_map也是一个容器。Stl的容器为了外界方便访问容器内数据单元,提供了迭代器。Named_slot_map也有自己的迭代器。这个迭代器就是named_slot_map_iterator类。Named_slot_map提供了以下方法来获得迭代器iterator begin()iterator end()Begin方法提供首迭代器,end方法提供尾迭代器。向容器中插入数据用insert。清除某个数据用而而然erase,清空容器中的所有数据用clear

posted on 2007-04-25 15:18 walkspeed 阅读(1457) 评论(1)  编辑 收藏 引用 所属分类: STL、Boost、范型编程C++语言

FeedBack:
# re: Signal中用来管理slot的管理器[未登录]
2007-04-25 16:51 | chemz
深刻,boost的惯用法,通过function对象来将各种可以调用的实体(如:全局函数、成员函数、functor等)统一成为一种可调用对象。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用链接

留言簿(4)

随笔分类(64)

随笔档案(58)

文章分类(3)

文章档案(3)

相册

收藏夹(9)

C++零碎

好友

搜索

  •  

积分与排名

  • 积分 - 157857
  • 排名 - 163

最新评论

阅读排行榜

评论排行榜