问题描述
这主要是一个好奇心问题。
constexpr auto xxx = boost::hana::overload(
[](SomeType& x){ /* x is used and something is returned */ },[](SomeOtherType1&){ /* no-op in this case */ },[](SomeOtherType2&){ /* no-op in this case */ }
);
后两个lambda仅忽略其参数。
因为我知道boost::hana::always
是要创建一个忽略其参数并始终返回传递给always
的参数的函数,所以我在徘徊是否Hana(或其他库)提供了类似的函数来忽略一个参数(或所有参数),这样两个lambda都可以用blackHole
代替,我知道这并不是一个真正的数学函数。
当我看到有关std::ignore
的cppreference的结果时,我很烦,但是没有……那是完全不同的事情。
解决方法
因此,您基本上是在问,是否有全局函数对象或某个类在调用时像jal
一样工作?我不知道STL中的这种功能。 C ++ 20添加了std::as_const
,其工作方式类似于[](auto &&) {}
,因此与您想要的不完全相同,但是非常接近。在[](auto &&in){return in;}
之前,您可以滥用其他功能,例如{{3}}或C++20
,尽管我不知道会返回std::ignore::operator=
的功能。
编辑:关于void
:std::ignore::operator=
被定义为一个对象,使得std::ignore
对任何std::ignore = blub;
都不起作用。也可以将其写为blub
。但是现在我考虑一下,那没有太大帮助,因为您不能将该函数直接传递给例如一个stl算法,则必须以某种方式将其包装。
顺便说一句,我的建议是您在某处定义
std::ignore.operator=(blub);
并完成它。滥用某些STL函数会使人们在阅读您的代码时感到困惑,而恰当地命名为lambda则完全没有问题。