Хеш-функция для определенного пользователем класса. Как подружиться? :)
У меня есть класс С, который имеетstring* ps
личный член данных.
Сейчас я'хотел бы иметьunordered_map
для которого мне нужна пользовательская хеш-функция.
По ссылке c ++Я могу сделать это как
namespace std {
template
class hash {
public:
size_t operator()(const C &c) const
{
return std::hash()(*c.ps);
}
};
}
Проблема в том, что я могукажется, сделатьoperator()
а такжеC
друзья, чтобы я мог получить доступ.ps
Я попробовал это:
class C;
template
class std::hash;
class C{
//...
friend std::hash::operator ()(const C&) const; // error: Incomplete type
};
// define hash here.
но это говорит о том, что Incomplete type ... в спецификаторе вложенного имени ...
Я могу'Поверните определения также, потому что, если класс C определен позже,hash
не имеет возможности узнать о.ps
Что я здесь не так делаю? Как можно исправить эту ситуацию, не делаяps
общественности?