0

클래스가 Sorter입니다. 그것에는 두 가지 공개 항목이 있습니다.비 정적 멤버 함수를 사용하는 C++ 정렬 벡터

  1. int 형 가변 choice
  2. 멤버 함수 매개 변수로 두 객체를 받아들이 int 형 반환 값 compare 불렀다.

는 I 생성자에 값 choice를 통과하면서

그럼 난 vector 정렬 C++ sort 함수를 사용하고 싶어 Sorter의 인스턴스를 생성하려고. 내가 만든 인스턴스의 멤버 함수 compare을 전달합니다.

멤버 함수 compare은 변수 choice을 사용하여 정렬 메커니즘을 결정합니다.

그러나 Sorter 인스턴스의 compare 멤버 함수에 대한 포인터를 가져올 수 없습니다.

누군가이 점에 대해 조언 해 줄 수 있습니까? 당신이 당신의 Sorter 클래스의 구조를 변경 할 수있는 경우

+5

달성하려는 작업이 완전히 명확하지 않습니다. 'Sorter '의 정의와 사용 예제와 같은 일부 코드를 게시하십시오. –

답변

4

,이 같은 operator()를 정의하여 함수 개체를 만들 수 있습니다 :

bool Sorter::operator()(const MyObject &o1, const MyObject &o2) { 
    // return true if o1 < o2 
} 

그런 다음 당신은 그냥 std::sortSorter 클래스의 인스턴스를 전달할 수 있습니다.

+0

감사합니다. 그것은 효과가 있었다. –

0

불행히도, 표준 라이브러리는 이와 같은 것들을 위해 연결자가 부족합니다. 그러나 boost::lambda은 다음과 같은 작업을 수행 할 수 있습니다.

#include <boost/lambda/bind.hpp> 

namespace l = boost::lambda; 

struct foo { 
    bool bar(char, char); 
}; 


void test(foo *pFoo) { 
    char a[2] = {0}; 

    std::sort(a, a+1, 
      l::bind(&foo::bar, pFoo, l::_1, l::_2)); 
} 
관련 문제