I struggled some time ago with doing object inheritance at more than one
level, like:
Glib::Object -> MyObjectA (w/ some properties for example) -> MyObjectB (w/
additional properties and/or overriden [virtual] functions)
While the gtkmm says about using "inheritance" I couldn't solve the problem
the way I expect from a C++ library. So, unless I'm mistaken somewhere, it
*almost* is impossible.
At that time I did some hard stuff to overcome that problem (with
implications on how you write your objects) but now I'm getting in even
bigger problems, when
instead of starting from Glib::Object I start from some other C++ wrapper,
like, for example,
Clutter::Group -> MyObjectA -> MyObjectB

This is really annoying since I want to use C++ w/ the various wrappers in
more then a simplistic GUI wrapper and with one level of inheritance  :-(

So far the problems that I think I saw:
a) it seems that the glibmm::object* source files (or at least some
ObjectBase constructors) are assuming derived objects are mostly C++
wrappers or one level deeper
b) (from memory) saw some strange things about declaring the wrapper's type
as being the C actual type instead of the just created type ?
   I think there was also a comment like "allow g_peek_class..." to work !?
c) wrappers around methods want to "peek" at the original C object to call
some functions for example, and are assuming current object has its parent
type the C object, which, in case it runs on
object MyObjectB, it is a wrong assumption.
  Can't the wrapping code gkmmproc is building,  try, since it really knows
(or could) the C type, work directly on that type (w/ g_peek_class...)
instead of relying on the
  actual object instance type being derived directly from the C type?
d) I also saw some comments about skiping some virtual function calls.
      I wonder:
     1) what's the optimization they're talking about? (haven't checked
sources enough)
     2) (would have to check) - can they also be a source of problems for
the thing I want to have fixed?

Anyway, I might be mistaken, and if there is a method to accomplish what I
said in the beginning that I want, I'd be glad to hear it!

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

Reply via email to