Duplicar posible:
How do I expand a tuple into variadic template function's arguments?
“unpacking” a tuple to call a matching function pointerC++ 11: Puedo pasar de múltiples args a tupla, pero ¿puedo pasar de tuple a multiple args?
En 11 plantillas de C++, hay una manera de usar una tupla como los args individuales de una función (posiblemente plantilla)?
Ejemplo:
Digamos que tengo esta función:
void foo(int a, int b)
{
}
y tengo la tupla auto bar = std::make_tuple(1, 2)
.
¿Puedo usar eso para llamar al foo(1, 2)
de una manera templaty?
No me refiero simplemente a foo(std::get<0>(bar), std::get<1>(bar))
ya que quiero hacer esto en una plantilla que no sabe el número de args.
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 señalar que yo preferiría para no crear una plantilla que funciona para una arg, otro que funciona para dos, etc ...
Sure. Desea algo como 'template call (F f, Tuple const & t) {f (std :: get (t) ...); } ' Ahora solo complete los espacios en blanco :-) –
¿Quiere decir omitir plantillas variadic y crear múltiples plantillas 'calller()' en su lugar? – Thomas
@Thomas: Tendrás que hacer un pequeño arnés de envío que construya el paquete entero 'N ...', y se especialice parcialmente cuando 'N == std :: tuple_size :: value', quieras llamar al función original en la forma que sugerí. –