使用包扩展循环参数包
在提供的代码片段中,您打算使用以下方法循环遍历可变长度参数包包扩展语法。但是,代码无法编译,并出现错误“参数包必须在此上下文中扩展。”
要解决此问题,您需要将包扩展放置在允许的上下文中。一个合适的位置是在花括号初始化列表中。考虑以下修改后的代码:
template<typename... Args> static void foo2(Args &&... args) { int dummy[] = { 0, ( (void) bar(std::forward<Args>(args)), 0) ... }; }
其工作原理如下:
通过此修改,代码将成功编译并循环参数包。
C 17 Fold表达式
在 C 17 中,您可以使用折叠表达式来简化代码:
((void) bar(std::forward<Args>(args)), ...);
此表达式展开包并应用指定的操作(在本例中,调用 bar( )) 从左到右。
以上是如何使用包扩展正确循环 C 参数包?的详细内容。更多信息请关注PHP中文网其他相关文章!