나는 게이트웨이 클래스를 가지고 있습니다. 이 클래스의 객체를 해시 테이블에 저장해야합니다 (tr1 :: unordered_set 사용). 다른 문맥에서 unorderd_set과 class Gateway를 모두 사용했지만 잘 작동하지만 tr1의 네임 스페이스에서 hash
함수를 정의 할 수 없기 때문에 정렬되지 않은 집합에 게이트웨이를 두는 방법을 생각할 수 없습니다.템플릿 클래스의 tr1에서 해시를 정의합니다.
namespace std {
namespace tr1 {
template<> <typename T> inline size_t hash<(typename Gateway<T>)>::operator()(Gateway<T> gT) const {
return gT.getCore()->hash(); //!DOESN't WORK
}
}
는 컴파일러는이 (typename Gateway<T>
가) 잘못 말했다 (그리고 다른 많은 변종) :
나는 시도했습니다. 내가 ()
을 꺼내면 hash<typename Gateway<T>>()
의 끝에있는 >>
이 출력 스트림이라고 가정합니다.
과거에 내가이
namespace std {
namespace tr1 {
template<> inline size_t hash<Board>::operator()(Board b) const {
return b.hash(); //!WORKS FINE
}
}
}
사람이 문제에 도움이 되거 수 한 적이 있지만? 답에 대한
업데이트
덕분에 아직은 컴파일러는 불완전한 유형의 잘못된 사용 struct std::tr1::hash<>
우리가 완전한 정의하지 않고 클래스를 사용할 때 오류 이런 종류의 일이
, 아직라는 문제가있다 클래스는 선언 전에 완전히 정의됩니다. 나는 이미 템플릿없이 아주 비슷한 방식으로 문제없이 이것을 사용했다.
'hash>()'> 문자 사이에 공백이 필요합니다. C++ 0x가 수정되었습니다. –
KitsuneYMG
http://en.cppreference.com/w/cpp/utility/hash에 나와있는 예제에 따라 비슷한 문제가 발생했습니다.) –