c++ - TMP C++ 和参数包

标签 c++ c++11

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/

相关文章:

c++ - u8R"delim(SomeTextInHere)delim"在 C++ 中是什么意思?

class - C++ - 在以下情况下,为什么我必须包含 .cpp 文件和/而不是 .h 文件才能访问全局变量的值?

c++ - C/C++ 期望主表达式在 "else"之前

c++ - const 引用作为返回值如何在 C++ 中工作

c++ - 如何使用默认和删除的函数 C++

c++ - 使用 CryptUIWizImport 自动导入证书作为 C++ 的受信任根

c++ - 随着数字变大,c++ 中的 std::sqrt 函数会变慢吗?

C++11 正则表达式多行 : Why does the group ([^\\0]+\n)? some_text 在 match[1] 中包含所有内容?

c++ - 为什么使用常量表达式作为模板参数?

c++ - 将 RTTI 散列与模板函数一起使用