【发布时间】:2016-05-21 09:44:57
【问题描述】:
根据N4295 C++17 将允许我计算未知数量的参数的总和:
template<typename ... T>
int sum(T...t)
{
return (... + t);
}
该文档进一步指出,我可以使用 == 或 > 等运算符来代替 +。任何人都可以想出一个明智的例子来说明我什么时候想在这样的结构中使用 == 或 >?
(我意识到人们可以定义 == 和 > 来对奇怪的类做奇怪的事情,但这肯定违反了良好的做法。写 a > b > c > d 几乎不是一个好主意,不是吗?)
【问题讨论】:
-
如果你使用带有一些特殊起始元素的二元折叠,也许你可以说
(apply_op() == ... == t)让apply_op的operator==做正确的事? -
据我记得,一元折叠被删除了 +。您必须写
(T{} + ... + t)或(t + ... + T{})(或任何对您有意义的值)。 -
@chris 只有在参数包为空时才被移除。只要
...t中至少有一个元素,上述函数仍然可以按预期工作。 -
@Morwenn,很有趣,我从来没听过那部分。
-
@chris 好吧,我们的目标是防止在没有给定参数时使用默认的
int-typed0,这可能会导致在这种特定情况下调用不正确的重载。提供参数后,返回类型取决于参数的类型,这通常是预期的行为。只有空箱子很棘手。
标签: c++ c++17 fold-expression