C ++ 11: Puedo pasar de múltiples args a tuplas, pero ¿puedo pasar de una tupla a múltiples args? [duplicar]

Posible duplicado:
¿Cómo puedo expandir una tupla en los argumentos de la función de plantilla variadic?
"Desempaquetar" una tupla para llamar a un puntero de función correspondiente

En las plantillas de C ++ 11, ¿hay una manera de usar una tupla como los argumentos individuales de una función (posiblemente plantilla)?

Ejemplo:
Digamos que tengo esta función:

void foo(int a, int b)  
{  
}

Y tengo la tuplaauto bar = std::make_tuple(1, 2).

¿Puedo usar eso para llamar?foo(1, 2) de una manera templada?

No me refiero simplementefoo(std::get<0>(bar), std::get<1>(bar)) ya que quiero hacer esto en una plantilla que no conoce el número de argumentos.

Ejemplo más completo:

template<typename Func, typename... Args>  
void caller(Func func, Args... args)  
{  
    auto argtuple = std::make_tuple(args...);  
    do_stuff_with_tuple(argtuple);  
    func(insert_magic_here(argtuple));  // <-- this is the hard part  
}

Debo tener en cuenta que preferiría no crear una plantilla que funcione para un argumento, otra que funcione para dos, etc.

Respuestas a la pregunta(2)

Su respuesta a la pregunta