2 ms·
OO in C can be uglier than in C++ but there's one big advantage: an object can use a mix of functions from different "classes" instead of pointing to a fixed vt
by zwieback 15y ago
OO in C can be uglier than in C++ but there's one big advantage: an object can use a mix of functions from different "classes" instead of pointing to a fixed vtable. An object can decide to build its own vtable and patch in optimized member functions.
- valyala 15y agoAgreed. Explicitly created vtables in C are much more flexible than implicit vtables provided by C++ for classes containing virtual functions. It is easy to patch vtable functions by optimized implementations on the fly either on a per-class or per-object basis.
- lurker19 15y agoHow does C's version compare to the approach in C++ of using composition (instead of inheritance) to combine several objects into one? I guess C allows finer-grained "monkey patching" of one function pointer?
- zwieback 15y agoYes, I think the main difference is that run-time changes are allowed. C++ composition and things like mixins using templates allow combining without inheriting but everything is statically typed at compile time. Of course all this dynamic stuff and more is still possible in C++, in fact, C++ features could be used to build a better "dynamic patching" mechanism than C, so it's not really an argument against using C++ at all, I'm a big fan myself. The interesting question remains whether C code, no matter what kind of feature is implemented, is inherently easier to maintain for a project like the Linux kernel.