개인 멤버 클래스 (Inner
)가있는 클래스가 있습니다 (Outer
). 나는 비 순정 표준 컨테이너에 Outer::Inner
의 인스턴스를 저장하려고하므로 std::hash<Outer::Inner>
을 전문으로하고 싶습니다. 그러나전용 멤버 클래스의 std :: hash 특수화
이 작성 :
error: 'Inner' is a private member of 'Outer'
std::size_t operator()(const Outer::Inner &p) const
^
내가 this answer에 따라 std::hash
친구 구조체를 만들기 위해 노력했다,하지만 작동 중 하나를하지 않았다 :
namespace std {
template<>
struct hash<Outer::Inner> {
std::size_t operator()(const Outer::Inner &arg) const
{
return std::hash<int>()(arg.someSpecialProperty);
}
};
}
컴파일러가 불평을 Outer::Inner
의 전방 선언은 다음으로 실패했습니다 :
error: use of undeclared identifier 'Outer'
그럼 어떻게해야합니까? (만약 내가하려는 일이 가능하다면)?
는 : 귀하의 경우 수없는 것처럼 당신이 친구를 추가 할 수 없기 때문에 http://stackoverflow.com/questions/8760181/friend-within-private-nested-class이 보인다 in std :: hash ... – AntiClimacus
@AntiClimacus 왜냐하면 나는 원래'std :: hash' 템플릿을 선언 한 사람이 아니기 때문입니다. –
이것이 이유입니다. – AntiClimacus