如何使用成员函数映射参数包?(非恢复性,折叠前表达式)



在C 17中,折叠式表达式允许您映射参数包,在每个函数中调用成员函数,然后将它们传递到另一个函数之前:

template <typename... Ts>
double func(const Ts&... ts) { ... }
template <typename... Us>
double func2(const Us&... us)
{
    // assume all member_func return types are non-void
    return func((us.member_func(1), ...));
}

是否可以在C 14?

中获得类似的非恢复映射

您的原始代码仅将一个参数传递给该函数。那是因为这个

(us.member_func(1), ...)

是应用逗号运算符的折叠表达式。它将所有这些成员按顺序调用,但表达式的值只是最后一个调用返回的内容。

假设您要在每个对象上调用成员,然后将所有结果传递到下一个功能,则修复程序还将其变成有效的C 14:

template <typename... Us>
double func2(const Us&... us)
{
    // assume all member_func return types are non-void
    return func(us.member_func(1) ...);
}

只是函数参数列表中的常规包扩展。尽管最好之间没有任何测序要求。逗号运算符具有测序保证,对函数参数的评估要少得多。

相关内容

  • 没有找到相关文章

最新更新