2014-04-14 5 views
2

클래스 A 및 함수 객체 A_less을 고려하십시오. A_less은 두 개의 A 포인터를 비교합니다 (A::getvalue()의 결과에 따라 다름).템플릿 인스턴스화시 런타임 값 사용

class A { 
    int getvalue(const string &Parameter); 
}; 

struct A_less : public binary_function<A *, A *, bool> { 
    A_less(const string &P) : Parameter(P) { } 
    bool operator()(const A *lhs, const A *rhs) const { 
     return A->getvalue(Parameter) < rhs->getvalue(Parameter); 
    } 
    string Parameter; 
} 

은 어떻게 Parameter의 (런타임) 값을 특정에 따라 A_less으로 분류, A 포인터의/정렬 된 컨테이너를 생성 (세트, priority_queues, ...)를 선언 가야합니까? 이처럼

답변

2

:

std::string p = ...; 
std::set<A,A_less> m(A_less(p)); 

당신은 (set 2 번째입니다) 템플릿 매개 변수 Compare를 지정해야합니다. 지도를 만들 때 map의 생성자에 비교 함수 객체를 제공해야합니다.

+0

니스, 이제'set (Compare & comp) '도구가 필요한 것을 알 수 있습니다. gcc로 잘 컴파일하면 MS 컴파일러에서 C4930이라는 경고가 발생합니다. 'std :: set <_Kty,_Pr> T (A_less)': 프로토 타입 함수가 호출되지 않았습니다 (변수 정의가 의도 되었습니까?). –