[在类似的问题(例如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包含一些示例代码和使用invoke的玩具版本的all_of
。
为什么要设置此限制?我想念什么吗?我以为std::invoke
标准化后,它也应该应用于适当的STL函数。
原因1:从未有人提出过。