型キャスト

RefPtrは基底となる型にキャストすることができます。これは通常のものと同様です。

Glib::RefPtr<Gtk::TreeStore> refStore = Gtk::TreeStore::create(columns);
Glib::RefPtr<Gtk::TreeModel> refModel = refStore;

このことはconst Glib::RefPtr<BaseType>型の引数を持つ任意のメソッドは、const Glib::RefPtr<DerivedType>型も引数としてとれるということを意味しています。このキャストは暗黙に行われます。これも通常のポインタと同様です。

さらに、派生の型にキャストすることもできます。しかし、そうするための文法は通常のポインタのものと少々異なっています。

Glib::RefPtr<Gtk::TreeStore> refStore =
Glib::RefPtr<Gtk::TreeStore>::cast_dynamic(refModel);
Glib::RefPtr<Gtk::TreeStore> refStore2 =
Glib::RefPtr<Gtk::TreeStore>::cast_static(refModel);