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 に答える