本以为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 阅读(835)
评论(2) 编辑 收藏 引用 所属分类:
STL、Boost、范型编程 、
C++语言