本以為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 閱讀(846)
評論(2) 編輯 收藏 引用 所屬分類:
STL、Boost、范型編程 、
C++語言