首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TMP C++和参数包

TMP C++和参数包
EN

Stack Overflow用户
提问于 2016-04-28 13:47:22
回答 1查看 215关注 0票数 2
代码语言:javascript
复制
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)不返回参数/模板包,所以我不能使用上下文。

有可能看到代码是如何处理元编程的吗?类似于预处理后?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-28 14:00:28

这是一种通过生成索引的编译时间序列来扩展std::tuple的方法.

此上下文中的...扩展包含未展开参数包的窗体。它将生成如下列表:

代码语言:javascript
复制
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时使用从元组提取的参数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36916649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档