gpt4 book ai didi

c++ - 为什么 `std::all_of` 不使用 `std::invoke` ?

转载 作者:行者123 更新时间:2023-12-03 02:26:05 24 4
gpt4 key购买 nike

在类似的问题(例如 here )中已经注意到,您不能将类方法指针作为谓词传递给 std::all_of

但是,在 C++17 中,我们有 std::invoke,这应该使 std::all_of 和类似函数可以轻松接受成员函数(甚至成员变量)指针。

更具体地说,以下内容无法在 GCC 9.2 上编译:

#include <algorithm>
#include <vector>

struct S {
bool check() const { return true; }
};

int main() {
std::vector<S> vs;
std::all_of(vs.begin(), vs.end(), &S::check);
}

这个Godbolt link包含一些示例代码和使用调用的 all_of 的玩具版本。

为什么有这样的限制?我错过了什么吗?我想象当 std::invoke 标准化时,它也应该被应用于适当的 STL 函数。

最佳答案

原因 1:从未有人提出过。 P0312R1提议使指向成员函数的指针在该语言中可调用,但被拒绝(对于进行此更改尚未达成共识)。

原因 2:使用 lambda(以及之前的 std::bind),动力很少。如果 S 是 std 定义的类型(例如 vector),则由于其他原因,成员到指针选项将是非法的。

std::all_of(vs.begin(), vs.end(), [](auto const& s) {return s.check();});

关于c++ - 为什么 `std::all_of` 不使用 `std::invoke` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58381306/

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