gpt4 book ai didi

c++ - 忽略其参数的函数

转载 作者:行者123 更新时间:2023-12-03 07:00:21 24 4
gpt4 key购买 nike

这主要是一个好奇的问题。
我看到这样的代码(我对它的作用不感兴趣)

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 */ }
);
后两个 lambdas 只是忽略他们的论点。
因为我知道 boost::hana::always是创建一个忽略其参数并始终返回传递给 always 的参数的函数。 ,如果 Hana(或另一个库)提供类似的函数来忽略一个参数(或所有参数),我在徘徊,这样两个 lambda 表达式都可以被替换为,比如, blackHole ,我知道这并不是真正的数学函数。
当我在 cppreference 上看到 std::ignore 的结果时我很高兴,但不......这是完全不同的事情。

最佳答案

所以你基本上是在问是否有一个全局函数对象或库中的某个类可以像 [](auto &&) {} 那样工作。什么时候叫?我不知道 STL 中有这样的函数。 C++20 添加 std::identity 就像 [](auto &&in){return in;}所以不完全是你想要的,但很接近。之前 C++20您可以滥用其他功能,例如 std::as_const std::ignore::operator=为此,虽然我不知道返回 void 的函数.
编辑:关于 std::ignore::operator= :std::ignore被定义为一个对象,使得 std::ignore = blub;对任何 blub 都没有影响.这也可以写成 std::ignore.operator=(blub); .但是现在我考虑了一下,这并没有那么有用,因为您不能将该函数直接传递给例如一个 STL 算法,你必须以某种方式包装它。
顺便说一句,我的建议是你在某个地方定义

const static auto do_nothing = [](auto &&){};
// Requires C++14, if you have C++17 available, use
constexpr auto do_nothing = [](auto &&){};
并完成它。滥用某些 STL 函数可能会让阅读您代码的人感到困惑,而恰当命名的 lambda 则完全没有问题。

关于c++ - 忽略其参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64695127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com