Std::all_of不接受类成员函数作为只有一个参数的函数

std::all_of not accepting class member function as function with 1 argument

本文关键字:函数 参数 有一个 成员 all of 不接受 Std      更新时间:2023-10-16

我不知道我在std::all_of呼叫中做错了什么。

I have a class Statistics:

class Statistics {
public:
bool isDataSet() const { return m_data.size() > 0; }
private:
std::vector<double> m_data;
};

Statistics类的每个实例对应于一个特定的对象。

在另一个文件中的另一个函数中,我希望仅在所有 Statistics实例中初始化数据时才显示统计信息。我想以如下方式使用std::all_of函数:
if( std::all_of(m_stats.begin(), m_stats.end(), &Statistics::isDataSet) ) {
...
}

where std::vector<Statistics*> m_stats.

编译器报告错误,在"谓词项不计算为1个参数的函数"。据我所知,每个类成员传递这个指针作为第一个参数,所以Statistics::isDataSet()实际上应该是一个只有一个参数的函数。但std::all_of认为这是错误的。

我假设Statistics::isDataSet()应该被接受为std::all_of()中有1个参数的函数,我错了吗?

use

std::bind(&Statistics::isDataSet, std::placeholders::_1)

[](const Statistics& s) { return s.isDataSet(); }

代替&Statistics::isDataSet调用all_of。后者期望一个可调用的类型(作为谓词),并将一个Statistics的实例传递给它。指定成员函数w/o实例显然不足以调用