使用 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));
优点:
以上是C 17 折叠表达式如何简化可变参数函数调用?的详细内容。更多信息请关注PHP中文网其他相关文章!