I've been considering this issue in regard to writing a game engine on top of existing Irrlicht hierarchy. I would like to derive some IGameNode (for insance) out of ISceneNode (or IAnimatedMeshSceneNode or whatever). Since these are just interfaces it's necessary to create a non-abstract class like CGameNode, which would have to inherit from CSceneNode. And here is the problem - all CScene* classes are Irrlicht intenal classes and don't seem to have been exported into the irrlicht.lib. In the result I get undefined reference errors during linking. The only choice (hopefully not)
is to simply add mentioned classes into irrlicht project. Well, I mean into my irrlicht engine project file (in VS for instance), not Nico's:)
But this means tampering with the engine itself and doesn't look promising, not to mention constant rebuilding of the whole (pretty big) project (well, not as much of a problem in VS.)
The composition concept seems far easier in implementation at first, but the impression soon turns out to be deceiving, since you can no longer benefit from polymorphism, or even brute downcasting. It's especially tiresome in functions like getSceneNodeFromRayBB (or something), which make it pretty hard (or at least ugly) to identify the 'game entity' connected with the scene node.
I'm curious to see how you approached this problem! I hope I'm not the only one to encounter it