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)不返回参数/模板包,所以我不能使用上下文。
有可能看到代码是如何处理元编程的吗?类似于预处理后?
提前谢谢。
发布于 2016-04-28 14:00:28
这是一种通过生成索引的编译时间序列来扩展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时使用从元组提取的参数。
https://stackoverflow.com/questions/36916649
复制相似问题