Variadic шаблон гетерогенного контейнера

Мне нужно реализовать некоторый класс контейнера шаблонов с переменным числом элементов с разнородными элементами, который позволяет выполнять итерацию по этим элементам Моя первая идея - сделать класс с членом std :: tuple с переменными аргументами, но получить элементы из кортежа массивом (через циклы) невозможно:

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();
}

Есть идеи?

Постскриптум Я не хочу использовать форсированные гетерогенные контейнеры, такие какповышение :: вариант или жеповышение :: любой

Ответы на вопрос(2)

Ваш ответ на вопрос