Thank you!

On Wed, 4 Aug 2021 19:19:36 +0200
Kjell Ahlstedt <kjellahlst...@gmail.com> wrote:

> Glib::ObjectBase is a virtual base class. The constructor of a
> virtual base class is called from the most derived class. When
> ModelImpl is the most derived class, its constructor calls 
> Glib::ObjectBase(typeid(ModelImpl)). When Derived is the most derived 
> class, Glib::ObjectBase(typeid(ModelImpl)) is not called. Instead 
> ObjectBase's default constructor is called from Derived's
> constructor. That's not what you want in this case. You must call the
> right ObjectBase constructor from Derived's constructor, like
> 
> class Derived: public ModelImpl
> {
>      Derived()
>      : Glib::ObjectBase(typeid(Derived)),
>        ModelImpl() {}
> };
> 
> Den 2021-08-04 kl. 12:15, skrev Sergey Smirnykh via gtkmm-list:
> > Hello!
> >
> > I've run into the issue I can't resolve on my own. I have
> > a Gio::ListModel implementation and a (C++) class derived
> > from said implementation.
> >
> > Calling G_IS_LIST_MODEL(gobj) on the implementation's gobj returns
> > 1. However, G_IS_LIST_MODEL(gobj) on the derived class's gobj
> > returns 0.
> >
> > How to make inheritance work? I've been unable to find any
> > guides/tutorials on this issue, hence the question.
> >
> > The implementation is defined as follows:
> >
> >      class Item { ... }
> >
> >      class ModelImpl: public Gio::ListModel, public Glib::Object {
> >      public: ModelImpl(): Glib::ObjectBase(typeid(ModelImpl)),
> >          Gio::ListModel() {}
> >          virtual ~ModelImpl() = default;
> >      protected:
> >          std::vector<Item*> items;
> >          GType get_item_type_vfunc() override {
> >              return Item::get_type();
> >          }
> >          guint get_n_items_vfunc() override {
> >              return items.size();
> >          }
> >          gpointer get_item_vfunc(guint position) override {
> >              if (position < items.size()) {
> >                  return items[position]->gobj();
> >              }
> >              return nullptr;
> >          }
> >      };
> >
> > And the derived class:
> >
> >      class Derived: public ModelImpl {
> >          Derived(): ModelImpl() {}
> >      }
> >
> > Thanks in advance!
> >
> > Sergey Smirnykh
> > _______________________________________________
> > gtkmm-list mailing list
> > gtkmm-list@gnome.org
> > https://mail.gnome.org/mailman/listinfo/gtkmm-list  

_______________________________________________
gtkmm-list mailing list
gtkmm-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to