2017-03-28 2 views
0

이 템플릿 함수에서 오류를 처리하는 좋은 솔루션을 찾는 데 문제가 있습니다.템플릿 메서드에서 오류 처리

template<typename K, typename V> 
const V& DirectHashmap<K, V>::lookup(K key) const 
{ 
    int pos = position(key); 

    return _values.get(pos)->value; 
} 

내가 돌아 오는 유형을 모르므로 오류 코드를 반환 할 수 없습니다. 나는 예외를 사용하지 않는 것을 선호한다. 왜냐하면 우리는 이전에 프로젝트에서 예외를 사용하지 않았기 때문에 예외가있는 유일한 방법 이었다면 일관 적이 지 않을 것이다.

누군가에게 좋은 해결책이 있다면 알려 주시기 바랍니다. 모든 의견은 대단히 감사하겠습니다.

+2

'std :: pair '? –

+0

'optional '을 반환 하시겠습니까? – AndyG

+0

은 bool isFound를 반환 할 수 있으며 참조로 두 번째 매개 변수 V &를 수락하고 발견 된 개체로 업데이트 할 수 있습니까? –

답변

3

대신 컬렉션에 const_iterator을 반환해야합니다.

최종 사용자는 컬렉션에 대해 .end()과 같은지 테스트 할 수 있습니다. STL의 컨테이너가 일반적으로 작동하는 방식입니다. 우리는 이제 클라이언트 코드 예제 코드에서 같은 유형의 오류를 정의 할하는 데 사용할 수있는 템플릿 변수가 C++ (14)를 시작으로

0

(map::find, unordered_map::findunordered_set::find 참조). 실제로 나는 그것들을 전역 변수로 만들지는 않을 것이지만 클라이언트가 열 수있는 네임 스페이스를 템플릿 함수가 알게 될 것이다.

#include <iostream> 

template<typename T> 
T error; 

template<> 
int error<int> = -1; 

int main(int argc, char* argv[]) 
{ 
    std::cout << error<int> << std::endl; 
    return 0; 
} 
관련 문제