std :: all_of不接受类成员函数作为带有1个参数的函数

时间:2013-01-22 14:46:02

标签: c++ c++11 std member

我无法确定这次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()应该被std::all_of()中的1参数作为函数接受?

1 个答案:

答案 0 :(得分:8)

使用

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

[](const Statistics& s) { return s.isDataSet(); }
在调用&Statistics::isDataSet时,

而不是all_of。后者期望可调用类型(作为谓词)并将Statistics的实例传递给它。指定成员函数w / o实例显然不足以进行调用