如何迭代打包可变参数模板参数列表
在 C 中,迭代打包可变参数模板参数列表会带来挑战,因为无法知道参数的数量并从中单独检索数据。在构造函数时使用宏进一步加剧了这个问题,这阻止了递归调用。
为了解决这个问题,提供的解决方案采用了自定义类型any,它可以保存不同类型的数据。通过将此类型传递给可变参数模板,参数将扩展为任何对象的向量。随后,可以使用专门的 getter 函数 (get
虽然此方法可以完成任务,但它确实需要详细函数调用,例如 foo(arg(1000))。为了简化这一点,我们寻求一种更简洁的迭代方法或等效于 std::get() 的打包可变参数模板参数列表。
使用 STL 折叠表达式和 Lambda 的解决方案
对于 C 17 及更高版本,折叠表达式可以与 lambda 函数一起使用来实现迭代。 lambda 可以在循环内执行任意操作,包括递增计数器和打印当前参数:
<code class="cpp">template <class ... Ts> void Foo (Ts && ... inputs) { int i = 0; ([&] { // Do things in your "loop" lambda ++i; std::cout << "input " << i << " = " << inputs << std::endl; } (), ...); }</code>
此方法提供了更简洁易读的迭代机制。
替代方案处理循环中断
虽然上述解决方案完成了任务,但它缺乏在循环内实现中断或返回的能力。为了解决这个问题,我们可以利用诸如以下的解决方法:
以上是我们如何简洁地迭代打包的可变参数模板参数列表?的详细内容。更多信息请关注PHP中文网其他相关文章!