posts - 58,  comments - 75,  trackbacks - 0

  本以为slot就是被signal存储并管理的slot。但是通过解读boost的源代码发现这个类并没有被signal直接管理,而仅仅用来构造了下connection。没有发现其他的用途。如果这样,那为何不直接在signal的connect中直接进行connection的构造呢。
  signal的connect函数没有直接接收function对象,而是接收的slot<>对象,而slot<>对象用来接收function。这个function看来未必一定是个函数对象了。可以是个原始函数或类函数了。 这个猜测要证实了才能确定。即便如此,这个类的作用是有限的。不过关于那个tackeable的用法还没有完全高清楚,可能那是这个类存在的理由,也许以后会有什么的发展。但现在确实看不出什么大的用途。
  奇怪于为何在signal中的slot管理器,不去直接管理slot<>的实例,而是管理connection和function的pair。

  个人觉得在slot<>中的最有用处的函数。
void slot_base::create_connection()
{
 basic_connection* con = new basic_connection();

 {
  con->signal = static_cast<void*>(this);
  con->signal_data = 0;
  con->blocked_ = false ;
  con->signal_disconnect = &bound_object_destructed;
 }
 
 data->watch_bound_objects.reset(con);

 scoped_connection safe_connection(data->watch_bound_objects);

 for(std::vector<const trackable*>::iterator i = data->bound_objects.begin();
  i != data->bound_objects.end(); ++i)
 {
  BOOST_SIGNALS_NAMESPACE::detail::bound_object binding;
  (*i)->signal_connected(data->watch_bound_objects, binding);

  BOOST_SIGNALS_NAMESPACE::detail::auto_disconnect_bound_object disconnector(binding);

  con->bound_objects.push_back(binding);
  disconnector.release();
 }

 safe_connection.release();
 data->watch_bound_objects.set_controlling(true);
}

posted on 2007-04-23 16:57 walkspeed 阅读(839) 评论(2)  编辑 收藏 引用 所属分类: STL、Boost、范型编程C++语言

FeedBack:
# re: 奇怪于signal中的slot类的用途[未登录]
2007-12-21 02:23 | eXile
个人认为boost现有的signal 实现并不怎么样, 应该在下一个版本中有较大的更新。
再来解释一下,使用trackable是为了把它作为一个基类,trackable对象销毁时,能自动断开相关连接。而connection的设计是因为boost::function并不能也无法提供一致的相等性比较,所以用connection来管理slot 的连接。当然设计的关键之处是还是要防止悬挂指针的出现,所以slot管理器并不直接操作slot的实例。  回复  更多评论
  
# re: 奇怪于signal中的slot类的用途
2007-12-28 15:49 | tip
请教,关于boost有没有什么好的学习文档,谢谢  回复  更多评论
  

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



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

常用链接

留言簿(4)

随笔分类(64)

随笔档案(58)

文章分类(3)

文章档案(3)

相册

收藏夹(9)

C++零碎

好友

搜索

  •  

积分与排名

  • 积分 - 159870
  • 排名 - 163

最新评论

阅读排行榜

评论排行榜