Mor*_*rse 2 c++ c++20 std-ranges
在 C++20 中,新的命名空间std::ranges被添加到标准中,其中许多算法复制了现有的算法,例如std::find_if和std::ranges::find_if。在cppreference 页面上,“旧”算法被称为“函数”,“新”算法被称为“类函数实体”。然而,我不能以“功能”的方式使用它,例如
auto result = myMapObj
| std::ranges::views::keys
| std::ranges::find_if([](const auto& key) { return key == 42; });
Run Code Online (Sandbox Code Playgroud)
我需要像旧的一样使用它std::find_if。那么有什么区别,在什么情况下我应该选择哪一个呢?
它们是具有重载的全局对象operator()。
foo(std::ranges::find_if)以这种方式设计它们有一些边际好处(与函数模板相比),例如能够使用合理的语法将它们作为参数传递给其他函数( )(要std::find_if以这种方式传递,您需要将其包装在 lambda 中) )。
在什么情况下我应该选择哪一个?
std::ranges::...假设您的标准库实现支持它们,您应该始终更喜欢这些版本。