提升哈娜any_of

Boost Hana any_of?

本文关键字:of any 哈娜      更新时间:2023-10-16

所以我尝试使用 Boost Hana 的 any_of 方法,但与实现中的描述不同,它仍然在首先满足谓词的元素之后调用元素。这是一个已知的错误吗?

这是一个MCVE:

#include <iostream>
#include <boost/hana.hpp>
int main() {
    auto t = boost::hana::tuple_t<int, double, float>;
    boost::hana::any_of(t, [](auto) { std::cout << "Calledn"; return true; });
}

输出:

Called
Called

这是一个错误;感谢您找到它。谓词的计算次数总是比绝对必要的多一次。该错误已通过此提交修复,它将进入 Boost 1.64.0。

话虽如此,Hana 的文档特别禁止您依赖此功能(并且在您发送给算法的函数中也有副作用):http://boostorg.github.io/hana/#tutorial-algorithms-effects。因此,虽然从性能的角度来看,我认为这是一个错误,但严格来说它不是一个错误,因为它不会违反库给你的合同。

我之所以不能使函数的契约成为这部分,是因为它可能会阻止某些实现策略有效,我想保持这种自由。如果用例引人注目,我会更认真地考虑它,但似乎并非如此。