Contenedor heterogéneo de plantilla variable.

Necesito implementar alguna clase de contenedor de plantillas variadas con elementos heterogéneos, lo que permite iterar por estos elementos. Mi primera idea es crear una clase con std :: tuple member con diversos argumentos, pero es imposible obtener elementos de la tupla por medio de una matriz (a través de bucles):

struct A {void prnt(){std::cout<<"A\n";} };    
struct B {void prnt(){std::cout<<"B\n";} };    
struct C {void prnt(){std::cout<<"C\n";} };

template<typename...Arg>
struct Prc
{
    Prc() : NumElems(sizeof...(Arg)), mems(std::make_tuple(Arg()...)){}

    int NumElems;
    std::tuple<Arg...> mems;

    void process()
    {
        for(int i=0; i<NumElems; ++i)
         std::get<i>(mems).prnt();//It's forbidden: "i" must be a constant
    }
};

int main()
{
    Prc<A,B,C> obj;
    obj.process();
}

¿Algunas ideas?

PD No quiero usar contenedores heterogéneos, comoboost :: variante oimpulso :: cualquiera

Respuestas a la pregunta(2)

Su respuesta a la pregunta