2013-02-16 2 views
0
template<typename T> class testClass{ 
    public: 
    bool compare(const int& a, const int& b){ 
     T x; 
     .... 
    } 
    void sort(){ 
     std::sort(data.begin() , 
       data.end() , 
       boost::bind<bool>(
       &testClass<T>::compare, 
       this, _1 , _2)); 
    } 
    std::vector<int> data; 
} 

std::sort의 비교 자로 사용되는 비 정적 멤버 함수가있는 템플릿 -d 클래스가 있습니다. 비교기는 typename T 매개 변수에 따라 다릅니다. 암시 적으로 this 포인터가 있으므로 boost::bind 포인터로 포인터 this을 시도합니다.boost :: bind 템플릿 클래스의 비 정적 멤버 함수

boost::bind<bool>(.......)boost::bind(....)도 컴파일되지 않습니다.

위의 예제는 MSVC 2008에서 실패합니다. 영어가 아닌 환경에서 영어로 정확한 메시지가 확실하지 않지만 두 프로토 타입 중 하나에 대해 불평하면 인수에 필요한 모든 변환이 가능할 수 있습니다.

+1

오류 메시지를 게시하고 온라인 컴파일러를 사용하여 필요한 경우 영어 메시지를 받으십시오. –

+0

시도한 코드를 게시하면'(.....)'이 도움이되지 않습니다. –

+1

[this] (http://liveworkspace.org/code/4CeG4e$0)이 컴파일되지만 코드와 같은지는 알 수 없습니다. –

답변

0

글쎄, 꽤 파기 한 후에 ... 문제는 위에 제시된 스 니펫에 실제로 있지 않습니다.

다른 회원 기능과 관련하여 (Strange VC++ compile error, C2244)과 유사한 문제로 나타납니다. compare에서 호출 된 함수가 위의 질문 에서처럼 컴파일되지 않은 템플릿 함수로 사용되었습니다. 처음에는 그 오류를 알지 못했습니다.

코드 부분을 class.cpp에서 class.hpp으로 옮겼습니다. 이제 작동합니다.

어리석은 MSVC 버그와 내가 만든 어리석은 실수.

관련 문제