迭代可变参数模板参数列表
打包可变参数模板参数列表虽然功能强大,但可能会给访问单个参数带来挑战。当需要迭代此类列表以根据其类型分隔参数时,此问题尤其相关。
要实现此目的,一种选择是利用 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中文网其他相关文章!