On Sun, 2014-04-27 at 19:39 +0200, Kjell Ahlstedt wrote: > Over and over again we find ourselves in situations where we want to > add data members to a class without breaking ABI, That can be, and has > been, done in an ugly way. See e.g. > https://git.gnome.org/browse/libxml++/tree/libxml++/parsers/parser.cc
I think it would be particularly useful in code that has lots of implementation code, yes. > https://git.gnome.org/browse/glibmm/tree/glib/glibmm/main.cc > https://git.gnome.org/browse/glibmm/tree/glib/glibmm/objectbase.h > and the discussion at the end of > https://bugzilla.gnome.org/show_bug.cgi?id=727822#c3. For the *mm wrapper libraries, we have traditionally tried to keep the objects as small as possible. I can imagine there being some objection to an extra pointer that is not used. I don't know if it would be a significant increase in object size. I'm not generally against it. I guess it's something to consider for the next big ABI break. It wouldn't deal with all the ABI issues. For instance, it would not allow us to add new virtual base classes when an underlying GObject starts to implement a new "interface". > > The pimpl (pointer to implementation) idiom, described at > http://en.wikipedia.org/wiki/Pimpl, offers a better solution. In a new > class, add > > private: > struct Impl; > Impl* pimpl; > > struct Impl is defined in the .cc file. It's not part of the ABI. It > can be changed without breaking ABI. > > The drawback of using the pimpl idiom consistently is of course that > it requires an extra pointer in each object instance. In many classes, > those pointers will never be needed. -- Murray Cumming murr...@murrayc.com www.murrayc.com _______________________________________________ gtkmm-list mailing list gtkmm-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtkmm-list