2013-01-22 71 views
0

我无法确定我在做什么这个std::all_of调用错了。std :: all_of不接受类成员函数作为函数与1参数

我有一个类统计:

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

统计类的每个实例对应于某个对象。

在不同文件中的另一个函数中,我想只在数据已经在全部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()函数?

回答

7

使用

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

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

,而不是&Statistics::isDataSet在调用all_of。后者期望可调用类型(作为谓词)并且将向其传递Statistics的实例。指定成员函数没有实例明显不足以拨打电话

+2

+1,后者对非绑定人群更直观,但都是可行的。 – WhozCraig

+0

谢谢! '[](const Statistics * s){return s-> isDataSet(); }'也做了诡计!为什么不''[x](){return x-> isDtaSet();}'工作? –

+0

@PavloDyban实际上最后一个lambda是一个_nulary__可调用对象(函数),但预期为一元谓词 – zaufi

相关问题