always(x)
是一个函数,使得always(x)(y...) == x
对于任何
y...
.
这让我认为它的行为不应该与这个 lambda: 有任何不同[](auto const&...){ return false; }
。
然而确实如此。例如,下面的代码打印11
,但是如果我将第三个 lambda 更改为hana::always(false)
,那么它会打印00
,这表明它always
正在吞噬任何参数。
#include <boost/hana/functional/always.hpp>
#include <boost/hana/functional/overload.hpp>
#include <iostream>
auto fun = boost::hana::overload(
[](int){ return true; },
[](double){ return true; },
[](auto const&...){ return false; }
);
int main() {
std::cout << fun(1) << fun(1.0) << std::endl;
}
- 这是预期的吗?
- 如果是这样,为什么?
- 无论是否预期,是什么导致了这种行为?
顺便说一句,我刚刚发现boost::hana::overload_linearly
,这不是boost::hana::overload
这种情况下的替代方案(因为always
不会得到所有的电话,这将[](int){ return true; }
是贪婪的),但很高兴知道它。