This looks fine in principle, although I can't review it properly today so please wait until monday.
So the goal was to get rid of the looping through the array of descriptors/info, right? As I see it expands now to initialize each constructor "manually" via macro. Or is there something else I'm missing?