Powiel możliwe:
How do I expand a tuple into variadic template function's arguments?
“unpacking” a tuple to call a matching function pointerC++ 11: Mogę przejść z wielu argumentów do krotki, ale czy mogę przejść od krotki do wielu argumentów?
w C++ 11 szablonów, czy istnieje sposób na wykorzystanie krotki jako indywidualne args od A (ewentualnie szablonu) funkcji?
Przykład:
Powiedzmy mam tej funkcji:
void foo(int a, int b)
{
}
I mam krotki auto bar = std::make_tuple(1, 2)
.
Czy mogę użyć tego do zadzwonienia pod numer foo(1, 2)
w sposób szablonowy?
Nie mam na myśli po prostu foo(std::get<0>(bar), std::get<1>(bar))
, ponieważ chcę to zrobić w szablonie, który nie zna liczby argumentów.
Pełniejsze przykład:
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
}
Należy zauważyć, że wolałbym, aby nie stworzyć jeden szablon, który pracuje dla jednego Arg, inny, który działa na dwa, etc ...
Pewnie. Chcesz coś takiego jak 'template call (F f, Tuple const i t) {f (std :: get (t) ...); } '. Teraz po prostu wypełnij puste pola :-) –
Masz na myśli pomijanie szablonów variadic i tworzenie wielu szablonów 'caller()' zamiast? – Thomas
@Thomas: Będziesz musiał zrobić małą uprząż wysyłającą, która buduje pakiet liczb całkowitych 'N ...' i częściowo specjalizuje się, gdy 'N == std :: tuple_size :: value', chcesz wywołać oryginalna funkcja w sposób jaki zasugerowałem. –