1
class StrangeFunctor
{
public:
StrangeFunctor(int (*comp)(string, string))
{
this->comp = comp;
}
int operator()(string str1, string str2)
{
return –comp(str1, str2);
}
private:
int (*comp)(string, string);
}
위 코드가 실제로 무엇을했는지 궁금했습니다. functor가 제대로 초기화되어 비교 목적을 위해 정렬 함수에 주어 졌다고 가정하면, 내 직감은 전달 된 인수의 순서를 뒤집어 놓는다는 것입니다. 그러나 그것이 맞는지, 왜 올바른지는 확실하지 않습니다.Functor 및 함수 포인터 논리
어떤 종류의 정렬 기능이 있습니까? 확실히'std :: sort'가 아닙니다. 그것은 비교가 equals에 대해서는 0보다 작고 -1보다 큰 경우에 음수 값을 반환 할 것으로 기대하는 정렬 함수에 대해 설명하는 방식으로 실제로 작동합니다 (qsort와 유사하지만 전달할 수는 없습니다. 'qsort'에 대한 함수 객체). –
@IgorTandetnik 그렇습니다. 단 한가지 예외는 있습니다 : 만약'comp'가'INT_MIN'을 리턴하면'-'는 오버플로를 일으킬 것입니다 ('int'의 일반적인 2의 보수 구현을 가정 함). – svick