5

XC++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;
}
4

2 に答える 2

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...>
{};

セマンティクスが正しいことを願っています。

于 2012-01-07T10:13:05.210 に答える