That was a huge problem referring to multiple inheritance (which is afaik necessary when using compile-time recursion). I solved this by explicitly reimplementing a "top level interface".
I pastebin'ed the code:
http://pastebin.com/Z1VHevhk - but here are some explanations:
-
SingleUpdater<> provides updating a single system. It messures the time used for the update and stores it.
-
MultiUpdater<> inherits from
SingleUpdater<> per passed type (using a C++11 parameter pack and compile-time recursion). On each update, the multi updater steps through its single updaters and calls the initial implementation
-
EntityUpdater<> is the final "public" interface: it inherits from
MultiUpdater (using the entire pack at once) and reimplements an API to access each system's time by accessing the correct baseclass explicitly. (see main function).
At the moment, I'm using this for my updates. Unfortunately (also because I'm using much templated stuff), the compile duration is too high for me. So I'll move to your approach using a base class.
But the approach itself is working