std :: sort()를 사용하여 벽에 충돌했습니다. 메서드의 호출자가 파생 된 순수 가상 클래스 (Compare
)가 있습니다 (이름은 MyComp
). 내 API의 프로토 타입의 순수 가상 클래스를 사용C++ STL : std :: sort()에 대해 "Strict Weak Ordering"이라는 파생 가상 클래스 사용
void Object::DoSort(Compare &comp) {
std::sort(this->mKeys.begin(),this->mKeys.end(), comp);
}
발신자 :
이class MyComp: public Compare {
bool operator()(const Row *r1, const Row *r2) { ... }
} cmp;
...
obj->DoSort(cmp);
리눅스에 g ++ 컴파일러가 불평 : "형 때문에 '비교'형식의 개체를 할당 할 수 없습니다가 '비교 나는 (순수하지 않음) 단순히 가상으로 Compare
을 수정하더라도 ' "
추상 가상 기능을 가지고는 std::sort()
은 여전히 대신 MyComp::operator()
의 Compare::operator()
코드를 호출합니다.
cmp (r1, r2)를 호출하면 올바르게 컴파일되고 올바른 결과를 반환합니다.
나는 틀린 일을해야하거나, 그렇지 않습니다. 도와주세요!
일을 프록시 개체를 사용하는 - 나는 생각하지 않았다. –
1) 매력처럼 작동합니다. 2) STL == 악. – 0x6adb015
@ 0x6adb : 악의에 따라 다릅니다! 참조로 가져 가면 예를 들어 할 수 없습니다. 예를 들어'std :: sort (x.begin, x.end(), MyComparator())'와 같이 (const가 아닌 ref를 임시 객체에 바인딩 할 수 없다). –