Función hash para la clase definida por el usuario. ¿Cómo hacer amigos? :)
Tengo una clase C, que tiene unastring* ps
miembro de datos privados.
Ahora, me gustaría tener unaunordered_map<C, int>
Para lo que necesito una función hash personalizada.
Según la referencia de c ++, Puedo hacer eso así
namespace std {
template<>
class hash<C> {
public:
size_t operator()(const C &c) const
{
return std::hash<std::string>()(*c.ps);
}
};
}
El problema es que parece que no puedo haceroperator()
yC
amigos para que yo pudiera accederps
.
He intentado esto:
class C;
template<>
class std::hash<C>;
class C{
//...
friend std::hash<C>::operator ()(const C&) const; // error: Incomplete type
};
// define hash<C> here.
pero dice que el tipo incompleto ... en el especificador de nombre anidado ...
Tampoco puedo cambiar las definiciones, porque si la clase C se define más adelante, lahash<C>
no tiene manera de saber sobreps
.
¿Qué estoy haciendo mal aquí? ¿Cómo se puede arreglar esta situación sin hacerps
¿público?