2010-08-18 2 views
1

내가하고 싶은 일은 별도의 네임 스페이스에서 데이터베이스 테이블/뷰와 함께 작동하는 내 자신의 sort(), copy() 등 구현을 정의하는 것입니다./etc 컨테이너 대신에 in-memory 표준 컨테이너를 사용하십시오. 내 사용자 정의 순방향 반복기를 허용하는 내 자신의 sort() 정의하면 컴파일러에서 어떻게 해결합니까? 또는 표준 iterator 유형 요구 사항과 일치하는 사용자 정의 iterator 유형을 전달할 수 있지만 std sort() 대신 사용자 정의 sort()를 사용하여 올바르게 해결되도록하려면 어떻게해야합니까?비 로컬 컨테이너에 대한 STL 알고리즘 오버로드/전문화 (데이터베이스 백엔드)

std sort()를 사용하는 경우 실제로는 작동하지만 내 sort() 구현과 달리 데이터베이스에 전달하지 않기 때문에 매우 비효율적입니다. 나는 그들이 같은 이름을 가지고 같은 타입을 받아들이면 std sort()를 통해 내 sort()를 제대로 호출하는 방법을 모르겠다. 나는 나의 설명에서 약간의 세부 사항을 놓쳤을지도 모른다. 그래서이 문제를 통하여 나의 길을 비웃는 것에 관해 나와 나와 견뎌 라.

또한 다음 질문이 제가 묻는 내용 (ADL 및 부분 전문화에 대해 언급 한 내용)과 가장 유사하지만 직접 문제를 해결하는지 또는 가장 좋은 방법을 설명하는지 잘 모르겠습니다. 내가 설명한 바를 수행 : Overloading for_each for specific iterator types

답변

4

실제로는 자신의 UDT에 대한 std 네임 스페이스 알고리즘을 특수화하는 동작을 정의했습니다.

namespace std { 
    template<> void sort<sometype::someiterator>(sometype::someiterator begin, sometype::someiterator end) { 
    ... 
    } 
}; 

편집 : Oopsie 정렬 대신 정렬.

다시 편집 : 오 이런, 나는 완전히 잘못된 것을 썼습니다. 이것은 명시 적 구문 구문이 아닙니다.

+0

좋아, 내가 이해할 것 같아, 내가 잘못했을 때 정정해라. RIterator는 나의 DBContainer에 대한 내 커스텀 반복자가 될 것입니다, 맞습니까? 그래서 기본적으로 저는 컴파일러에게 "당신은 이미 일반적인 sort()를 가지고 있지만,이 sort()는 sort()보다 더 나은 특정 타입을 처리 할 것입니다."라고 말하고 있습니다. 그 정렬을 다른 네임 스페이스에서 정의하고 동일한 결과를 얻을 수 있습니까? –

+0

@pheadbaq : 죄송합니다. 의도는 옳았지만 코드가 잘못되었습니다. 당신 말이 맞아요, 컴파일러는 일반 std :: sort 이상 특성화를 선택합니다. 다른 네임 스페이스에서 정의 할 수 있지만 일반 정렬 (기존 함수의 특수화)을 정의해야하며 또한 타사 코드와의 호환성을 잃어 버리면 혼란 스럽습니다. 팀원 모두 정상적인 분류를 사용하지 않습니다. – Puppy

+0

저와 함께 전문화 문제에 익숙해주세요 : \ 그래서 만약 std 네임 스페이스에서 내 사용자 정의 정렬을 정의한 다음 "std"를 사용하여 선언하면 사용자 정의 iterator를 완전히 정규화하지 않고 정렬 할 때 컴파일러에서 전문 버전. 그러나 다른 네임 스페이스 "foo"에서 sort를 정의한 다음 "std"및 "foo 사용"을 선언하고 정규화되지 않은 정렬을 호출하고이를 사용자 정의 반복기에 전달하면 올바른 정렬을 수행 할 수있는 기능이 중단됩니다. 내 반복자는 std :: sort를 사용하는 제 3 자 코드로, 내 팀은 명시 적으로 어떤 종류를 정의해야합니까? 그거야? –

관련 문제