其他分享
首页 > 其他分享> > c – 从元组中解包参数

c – 从元组中解包参数

作者:互联网

所以我想弄清楚它是如何工作的:C++11: I can go from multiple args to tuple, but can I go from tuple to multiple args?

我不明白的黑魔法是这段代码片段:

f(std::get<N>(std::forward<Tuple>(t))...)

这是我不明白的f里面的表达.

我理解表达式以某种方式解压缩/扩展内部的内容到参数列表中.但有人可以解释如何做到这一点?当我看到std :: get(http://en.cppreference.com/w/cpp/utility/tuple/get)的定义时,我看不出N如何适合……?据我所知,N是一个整数序列.

基于我可以观察到的,我假设表达式为E< X> …其中X是X1类型的序列. X2,… Xn,表达式将扩展为E< X1>,E< X2>. …… E< Xn>.这是怎么回事?

编辑:在这种情况下,N不是类型序列,而是整数.但我猜这种语言结构适用于类型和值.

解决方法:

我认为@ Xeo的评论总结得很好.从C 11标准的14.5.3开始:

A pack expansion consists of a pattern and an ellipsis, the
instantiation of which produces zero or more instantiations of the
pattern in a list.

在您的情况下,当您完成递归模板实例化并最终进入部分特化时,您就拥有了

f(std::get<N>(std::forward<Tuple>(t))...);

…其中N是四个整数(0,1,2和3)的参数包.从上面的标准来看,这里的模式是

std::get<N>(std::forward<Tuple>(t))

将…省略号应用于上述模式使其以列表形式扩展为四个实例,即

f(std::get<0>(t), std::get<1>(t), std::get<2>(t), std::get<3>(t));

标签:c,c11,templates,variadic-templates
来源: https://codeday.me/bug/20191001/1837662.html