【问题标题】:How to downcast RefPtr如何向下转换 RefPtr
【发布时间】:2014-08-29 11:39:05
【问题描述】:

在 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>。是否有标准方式或是否需要 hack 或如何处理视图和不同商店类型的典型过程。是否有任何检查功能以便向上转换可以安全完成,可能是编译时检查,或者如果在运行时不可能?任何文档的任何提示。

【问题讨论】:

  • 从基类转换为派生类是向下转换,而不是向上转换。

标签: c++ treeview glib gtkmm


【解决方案1】:

向下转换使用

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

documentation

【讨论】:

    【解决方案2】:

    向上转换是隐式的,如 nikitoz 链接的文档中所示。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 2011-05-01
      • 2017-03-16
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多