函数忽略其参数

问题描述

这主要是一个好奇心问题。

我看到了这样的代码(我对它的功能不感兴趣)

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=的功能。

编辑:关于voidstd::ignore::operator=被定义为一个对象,使得std::ignore对任何std::ignore = blub;都不起作用。也可以将其写为blub。但是现在我考虑一下,那没有太大帮助,因为您不能将该函数直接传递给例如一个stl算法,则必须以某种方式将其包装。

顺便说一句,我的建议是您在某处定义

std::ignore.operator=(blub);

并完成它。滥用某些STL函数会使人们在阅读您的代码时感到困惑,而恰当地命名为lambda则完全没有问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...