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, ...
( 例如) 。
在这种情况下,输出参数是特定的,因为它不是类型。是size_t
.
但是这里:std::get<Is>(tuple)...);
std::get<Is>(tuple)
不返回参数/模板包,因此我无法了解使用上下文。
附注是否可以看到元编程后代码的样子?与预处理后类似?
提前致谢。
最佳答案
这是一种通过生成索引的编译时序列来扩展 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
。
关于c++ - TMP C++ 和参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36916649/