2013-01-22 69 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

相關問題