【发布时间】:2020-04-02 01:23:46
【问题描述】:
我知道这个问题听起来很奇怪,所以这里有一点上下文。
最近我很失望地得知 C++20 范围内的 map reduce 不能按预期工作,即
const double val = data | transform(...) | accumulate (...);
不行,你必须这样写不自然:
const double val = accumulate(data | transform(...));
可以在here 和here 找到详细信息,但归根结底是,accumulate 不能在 2 个不同的用例之间消除歧义。
这让我想到了:
如果 C++20 要求您必须使用管道来使用范围,也就是您可以不编写
vector<int> v;
sort(v);
但你必须写
vector<int> v
v|sort();
这会解决歧义问题吗?
如果是这样,虽然对于使用 std::sort 和其他 STL 算法的人来说是不自然的,但我想知道从长远来看这是否是一个更好的设计选择。
注意: 如果这个问题太模糊,可以投票结束,但我觉得这是一个合理的设计问题,可以以相对公正的方式回答,特别是如果我对问题的理解是错误的。
【问题讨论】:
-
不能消除哪两个不同的用例?如果你不解释,我们就无法理解你的底线问题。
-
@einpoklum-reinstateMonica 我提供了链接,我认为它太冗长而无法内联:stackoverflow.com/questions/59130785/…
-
恕我直言,您可以用几句话来概括。 SO的习惯是不那么依赖链接的内容。无论如何,我明白你的意思;但我的回答是基于一般性的。