首页 >后端开发 >C++ >C 17 折叠表达式如何简化可变参数函数调用?

C 17 折叠表达式如何简化可变参数函数调用?

Barbara Streisand
Barbara Streisand原创
2024-11-19 11:17:02964浏览

How Can C  17 Fold Expressions Simplify Variadic Function Invocation?

使用 C 17 折叠简化可变参数函数调用

可变参数模板参数提供了一种便捷的方法来处理接受可变数量参数的函数。但是,创建递归链来调用每个可变参数上的函数可能会导致冗余代码生成。以下是如何使用 C 17 折叠表达式或 C 17 之前的解决方案来解决此问题。

C 17 折叠表达式:

(f(args), ...);

此折叠表达式可以用于在所有可变参数模板参数上调用函数,从而生成单个 N-arg 函数

Pre-C 17 解决方案:

1.将函数包裹在标识符中:

将函数转换为返回一个 int,它可以用作初始值设定项列表中的虚拟参数:

int print_wrap(const T& t) {
  print(t);
  return 0;
}

2.创建列表初始值设定项:

使用列表初始值设定项来扩展可变参数并调用修改后的函数:

{ print_wrap(args)... }

3.定义助手命名空间:

要使此方法可重用,请定义助手命名空间:

namespace so {
  using expand_type = int[];
}

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), 0)... }

4.用法:

SO_EXPAND_SIDE_EFFECTS(f(args));

优点:

  • 仅生成具有 N 个参数的单个函数调用。
  • 支持具有重载的逗号运算符。
  • 确保从左到右求值参数。

以上是C 17 折叠表达式如何简化可变参数函数调用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn