如何降低RefPtr

时间:2014-08-29 11:39:05

标签: c++ treeview glib gtkmm

在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>。是否有标准方式或是否需要黑客攻击?或者如何使用视图和不同的商店类型进行操作。是否有任何检查功能,以便上传可以安全,可能是编译时检查或在运行时不可能?对任何文档的任何提示。

2 个答案:

答案 0 :(得分:6)

对于向下转型使用

Glib::RefPtr<Gtk::ListStore> ptrDerived = Glib::RefPtr<Gtk::ListStore>::cast_dynamic(treeModel);

documentation

答案 1 :(得分:2)

上传是隐含的,如nikitoz链接的文档中所示。

但是,Gtk::ListStore不是Gtk::TreeModel的基类,而是其他方式。你问的是向下倾斜,而不是向上倾斜。为此,您需要显式动态转换。 Glib::RefPtr有一个静态成员函数模板cast_dynamic,它就是这样做的。您可以在class reference

中找到它