1

我不知道我在这个电话中做错了什么std::all_of

我有一堂统计课:

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) ) {
...
}

在哪里std::vector<Statistics*> m_stats.

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

我的假设是否Statistics::isDataSet()应该被接受为具有 1 个参数的函数std::all_of()

4

1 回答 1

8

采用

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

或者

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

而不是 &Statistics::isDataSet调用all_of. 后者期望一个可调用类型(作为谓词)并将传递一个实例Statistics给它。指定没有实例的成员函数显然不足以进行调用

于 2013-01-22T14:53:13.680 回答