2013-01-22 1 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이 잘못 생각합니다.

std::all_of()에 1 매개 변수가있는 함수로 Statistics::isDataSet()을 사용해야한다고 가정합니다.

답변

7

사용

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

또는

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

대신 all_of에 호출 &Statistics::isDataSet

. 후자는 호출 가능 유형 (술어로)이고 Statistics의 인스턴스를 전달합니다. 전화를 걸기에 충분하지 않은 멤버 함수를 명시 적으로 지정하면

+2

+1, 후자는 바인딩되지 않은 군중에 더 직관적이지만 둘 다 실행 가능합니다. – WhozCraig

+0

고마워요! '[] (const Statistics * s) {return s-> isDataSet(); }'도 트릭을 했어! 왜 [x]() {return x-> isDtaSet();}가 작동하지 않습니까? –

+0

@PavloDyban 마지막 람다는 __nulary__ 호출 가능한 객체 (함수)이지만 실제로는 단항 조건 자입니다. – zaufi

관련 문제