gpt4 book ai didi

c++ - 折叠表达式与任意可调用?

转载 作者:IT老高 更新时间:2023-10-28 12:36:26 25 4
gpt4 key购买 nike

纵观C++17 paper在折叠(和 cppreference )上,我很困惑为什么选择只与运算符(operator)一起工作?乍一看,它似乎更容易扩展 (... + 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;
}

最佳答案

首先,我很高兴我所写的内容在 clang 中有效(我看到您的更新实现了我提到的 4 个步骤中的 3 个)。我必须感谢 Nick Athanasiou对于在写作 this 之前与我讨论过的这种技术.

我现在提到这个的原因是因为我被告知他发布了 library (在boost库incubator中)实现了这些东西;您可以找到相关文档here 。这似乎是最初的想法(我们都在这里使用)并允许这样的代码:

(Op<Max>(args) + ...); // Op is a function producing the custom fold type

由于惰性求值和有状态运算符而被排除在外(或尚未包括在内,不能确定)。

关于c++ - 折叠表达式与任意可调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27582862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com