Переплетение распаковки VT с метапоследовательностью

template <int I> struct int_ {};

template < typename ... Pack >
struct thingy
{
    void call()
    {
       f(???);
    }
 };

При создании экземпляра он должен иметь следующий вид:

struct thingy<int,char,double>
{
    void call()
    {
        f(int, int_<1>(), char, int_<2>(), double, int_<3>());
    }
}

Как вы думаете, можно ли это сделать? Как?

Единственное, что я могу придумать, это иметь перегрузки для штуки с N различными параметрами, например так:

template < typename T0 > struct thingy<T0> { ... };
template < typename T0, typename T1 > struct thingy<T0,T1> { ... };

etc...

С реализацией вызова в каждой.

5
задан Edward Strange 10 May 2012 в 05:02
поделиться