可能重复:
How do I expand a tuple into variadic template function's arguments?
“unpacking” a tuple to call a matching function pointerC++ 11:我可以从多个参数去元组,但我可以从元组去多个参数吗?
在C++ 11层的模板,有使用一个元组作为一个(可能是模板)功能的个人ARGS的方法吗?
例:
比方说,我有这样的功能:
void foo(int a, int b)
{
}
和我有元组auto bar = std::make_tuple(1, 2)
。
我可以用它来模板调用foo(1, 2)
吗?
我不是简单的foo(std::get<0>(bar), std::get<1>(bar))
因为我想在一个不知道参数个数的模板中做这个。
更完整的例子:
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
}
我要指出,我宁愿不创建一个模板,对于一个ARG的作品,另一种为两部作品,等等
当然。你需要像'template call(F f,Tuple const&t){f(std :: get (t)...); }'。现在只需填入空格:-) –
您的意思是跳过可变参数模板并创建多个'caller()'模板? – Thomas
@Thomas:你将不得不做一个小小的调度工具来建立整数包'N ...',并且部分专精于'N == std :: tuple_size :: value',你想调用原来的功能,我建议的方式。 –