如何迭代打包可变参数模板参数列表
在 C 中,迭代打包可变参数模板参数列表会带来挑战,因为无法知道参数的数量并从中单独检索数据。在构造函数时使用宏进一步加剧了这个问题,这阻止了递归调用。
为了解决这个问题,提供的解决方案采用了自定义类型any,它可以保存不同类型的数据。通过将此类型传递给可变参数模板,参数将扩展为任何对象的向量。随后,可以使用专门的 getter 函数 (get
虽然此方法可以完成任务,但它确实需要详细函数调用,例如 foo(arg(1000))。为了简化这一点,我们寻求一种更简洁的迭代方法或等效于 std::get() 的打包可变参数模板参数列表。
使用 STL 折叠表达式和 Lambda 的解决方案
对于 C 17 及更高版本,折叠表达式可以与 lambda 函数一起使用来实现迭代。 lambda 可以在循环内执行任意操作,包括递增计数器并打印当前参数:
template
void Foo (Ts && ... inputs)
{
int i = 0;
([&]
{
// Do things in your "loop" lambda
i;
std::cout << "input " << i << " = " << inputs << std::endl;
} (), ...);
}
此方法提供了更简洁易读的迭代机制。
处理循环中断的替代方案
虽然上述解决方案完成了任务,它缺乏在循环内实现中断或返回的能力。为了解决这个问题,我们可以利用诸如以下的解决方法:
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3