【发布时间】:2025-12-17 00:10:01
【问题描述】:
在类似的问题(例如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函数中。
【问题讨论】:
-
查看 Godbolt 链接。调用成员函数是
invoke的目的之一。 -
它以
*it作为成员对象调用,其中it是all_of实现中的当前迭代器。 -
我现在明白你的意思了。错过了
S的向量。 -
@StoryTeller 没问题。
-
更接近您的问题,我认为您的代码可以工作。可能是实现中的错误?