Вам все еще интересен этот вопрос?
Я курсирую с C ++ 11, поэтому я попытался ответить.
Я не уверен, что понимаю, чего вы хотите (ну ... что вы хотели в 2012 году), но я думаю, что следующий пример должен поймать ваши требования.
template<int OFFSET>
struct A { enum O { offset = OFFSET }; enum S { size = 2 }; };
template<int OFFSET>
struct B { enum O { offset = OFFSET }; enum S { size = 4 }; };
template<int OFFSET>
struct C { enum O { offset = OFFSET }; enum S { size = 10 }; };
template <int N, template <int> class ...>
struct H;
template <int N>
struct H<N>
{ };
template <int N,
template <int> class C1,
template <int> class ... Cs>
struct H<N, C1, Cs...> : public C1<N>,
public H<C1<N>::size * C1<N>::offset, Cs...>
{ };
template <template <int> class ... C>
struct X : public H<1, C...>
{ };
int main()
{
X<A, B, C> x;
return 0;
}
p.s .: извините за мой плохой английский