2012-01-07 5 views
5

다음 코드에서 X은 C++ 11 가변 템플릿을 사용하도록 변환 된 것으로 보이며 임의의 수의 템플릿 인수를 지원해야합니까? 어쩌면함께 가변 템플릿 템플릿 연결

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 < template <int> class B0, 
      template <int> class B1, 
      template <int> class B2 > 
struct X : public B0<1>, 
        B1<B0<1>::size * B0<1>::offset >, 
        B2< B1<B0<1>::size * B0<1>::offset >::size * 
         B1<B0<1>::size * B0<1>::offset >::offset > 
{ }; 

int main(int argc, const char *argv[]) 
{ 
    X<A, B, C> x; 
    return 0; 
} 

답변

3

:

template <int Var, template <int> Head, typename... Tail> 
struct X_helper : Head<Var>, 
       , X_helper<Head<Var>::size * Head<Var>::offset, Tail...> 
{}; 

template <int Var, template <int> Arg> 
struct X_helper : Head<Var> 
{}; 

template <typename... Args> 
struct X : X_helper<1, Args...> 
{}; 

은 내가 의미를 잘 얻었기를 바랍니다.

+0

죄송없는 몇 가지 세부 사항이있다, 당신은'X_helper'에'인수를 ...'통과하지만 기대 첫 번째 매개 변수는'int'입니다. – SirGuy

+0

당신은 절대적으로 맞습니다, 고마워요 :) – filmor

0

이 질문에 관심이 있으십니까?

저는 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 : 내 나쁜 영어

관련 문제