template<std::size_t... Is>
void unlock_(std::index_sequence<Is...>) {
iter(std::get<Is>(tuple)...);
}
让我们考虑上面的例子。我无法理解iter(std::get<Is>(tuple)...);
。我知道...
正在扩展“运营商”。因此它应该应用于参数包(在意义参数中)或模板参数包。
我可以想象std::index_sequence<Is...>
是什么。因为Is
是模板参数包,所以它应该只是1, 2, 3, 4, ...
(例如)。
在这种情况下,out参数是特定的,因为它不是类型。它是size_t
。
但是在这里:std::get<Is>(tuple)...);
std::get<Is>(tuple)
不返回参数/模板包,因此我无法使用上下文。
P.S。有可能看到代码在元编程后的样子吗?与预处理后相似?
提前致谢。
答案 0 :(得分:2)
这是一种通过生成编译时索引序列来扩展std::tuple
的方法。
...
扩展包含未展开参数包的表单。它将生成如下列表:
Is...
0,1,2,...
doSomething(Is)...
doSomething(0), doSomething(1), doSomething(2), ...
doSomething(Is...)
doSomething(0,1,2,...)
std::get<Is>(tuple)...
std::get<0>(tuple), std::get<1>(tuple), std::get<2>(tuple), ...
iter(std::get<Is>(tuple)...)
iter(std::get<0>(tuple), std::get<1>(tuple), std::get<2>(tuple), ...)
效果是使用从元组中提取的参数调用iter
。