首页  >  文章  >  后端开发  >  如何在 C 中迭代可变参数模板参数列表?

如何在 C 中迭代可变参数模板参数列表?

Linda Hamilton
Linda Hamilton原创
2024-10-23 17:17:01107浏览

How to Iterate Over Variadic Template Argument Lists in C  ?

迭代可变参数模板参数列表

打包可变参数模板参数列表虽然功能强大,但可能会给访问单个参数带来挑战。当需要迭代此类列表以根据其类型分隔参数时,此问题尤其相关。

要实现此目的,一种选择是利用 C 17 中引入的折叠表达式。在这种情况下,使用 lambda 表达式,可以定义一个循环来迭代参数并执行所需的操作。

这是一个示例:

<code class="cpp">#include <iostream>

template <class ... Ts>
void Foo(Ts && ... inputs) {
  int i = 0;

  // Lambda that executes for each passed argument.
  ([&] {
    ++i;
    std::cout << "input " << i << " = " << inputs << std::endl;
  }(), ...);
}

int main() {
  Foo(2, 3, 4u, (int64_t)9, 'a', 2.3);
  return 0;
}</code>

在这个示例中,lambda 非常简洁,但可以在循环内执行更复杂的操作。需要注意的是,此技术需要 C 17 或更高版本。

对于需要返回或中断迭代的场景,可以使用 try/throw 和variable/if 切换方法,但应将其视为代码异味和仅在不可避免时使用。

以上是如何在 C 中迭代可变参数模板参数列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

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