C++11: я могу перейти от нескольких аргументов к кортежу, но могу ли я перейти от кортежа к нескольким аргументы? [дубликат]

Возможный дубликат:
Как расширить кортеж в вариативные аргументы шаблонной функции?
«распаковка» кортежа для вызова соответствующего указателя на функцию

Есть ли в шаблонах C++11 способ использовать кортеж в качестве отдельных аргументов функции (возможно, шаблона)?

Пример:
Допустим, у меня есть эта функция:

void foo(int a, int b)  
{  
}

И у меня есть кортеж auto bar = std::make_tuple(1, 2).

Могу ли я использовать это для вызова foo(1, 2)по шаблону?

Я не имею в виду просто foo(std::get(bar), std::get(bar)), так как я хочу сделать это в шаблоне, который не не знаю количество аргументов.

Более полный пример:

template  
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  
}

Должен отметить, что я бы предпочел не создавать один шаблон, который работает для одного аргумента, другой, который работает для двух и т. д.…

33
задан Community 23 May 2017 в 12:02
поделиться