在Gtk中,我有一个类层次结构:
Gtk :: ListStore派生自Gtk :: TreeModel
从Gtk::TreeView
我可以get_model()
Glib::RefPtr<Gtk::TreeModel>
如果我在我的Gtk::Treeview
Gtk :: ListStore中使用Gtk :: TreeModel并调用get_model()
我得到Glib::RefPtr< TreeModel >
但是我想要Gtk :: ListStore的调用成员函数。
如何将Glib::RefPtr<Gtk::TreeModel>
转换为Glib::RefPtr<Gtk::ListStore>
。是否有标准方式或是否需要黑客攻击?或者如何使用视图和不同的商店类型进行操作。是否有任何检查功能,以便上传可以安全,可能是编译时检查或在运行时不可能?对任何文档的任何提示。
答案 0 :(得分:6)
对于向下转型使用
Glib::RefPtr<Gtk::ListStore> ptrDerived = Glib::RefPtr<Gtk::ListStore>::cast_dynamic(treeModel);
答案 1 :(得分:2)
上传是隐含的,如nikitoz链接的文档中所示。
但是,Gtk::ListStore
不是Gtk::TreeModel
的基类,而是其他方式。你问的是向下倾斜,而不是向上倾斜。为此,您需要显式动态转换。 Glib::RefPtr
有一个静态成员函数模板cast_dynamic
,它就是这样做的。您可以在class reference