查看有关折叠的 C++17论文(以及有关cppreference),我很困惑为什么选择仅与运算符一起使用?乍一看,似乎只需在 的元素之间插入(... + args)
一个标记就可以更容易地扩展,但我不相信这是一个很好的决定。 +
args
为什么二进制 lambda 表达式不能很好地工作并遵循与上述后者相同的扩展?在不支持任意可调用对象的情况下将折叠语法添加到语言中让我感到震惊,那么语法是否允许使用我只是没有看到的方法来使用它们?
更新:这适用于min()
带有 clang 的可变参数函数
template <typename T>
struct MinWrapper {
const T& obj;
};
template <typename T, typename U, typename V=std::common_type_t<T,U>>
constexpr MinWrapper<V> operator%(
const MinWrapper<T>& lhs, const MinWrapper<U>& rhs) {
return {lhs.obj < rhs.obj ? lhs.obj : rhs.obj};
}
template <typename... Ts>
constexpr auto min(Ts&&... args) {
return (MinWrapper<Ts>{args} % ...).obj;
}