本以為slot就是被signal存儲(chǔ)并管理的slot。但是通過解讀boost的源代碼發(fā)現(xiàn)這個(gè)類并沒有被signal直接管理,而僅僅用來構(gòu)造了下connection。沒有發(fā)現(xiàn)其他的用途。如果這樣,那為何不直接在signal的connect中直接進(jìn)行connection的構(gòu)造呢。
signal的connect函數(shù)沒有直接接收function對(duì)象,而是接收的slot<>對(duì)象,而slot<>對(duì)象用來接收function。這個(gè)function看來未必一定是個(gè)函數(shù)對(duì)象了。可以是個(gè)原始函數(shù)或類函數(shù)了。 這個(gè)猜測(cè)要證實(shí)了才能確定。即便如此,這個(gè)類的作用是有限的。不過關(guān)于那個(gè)tackeable的用法還沒有完全高清楚,可能那是這個(gè)類存在的理由,也許以后會(huì)有什么的發(fā)展。但現(xiàn)在確實(shí)看不出什么大的用途。
奇怪于為何在signal中的slot管理器,不去直接管理slot<>的實(shí)例,而是管理connection和function的pair。
個(gè)人覺得在slot<>中的最有用處的函數(shù)。
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 閱讀(846)
評(píng)論(2) 編輯 收藏 引用 所屬分類:
STL、Boost、范型編程 、
C++語言