Как мне разрешить реализацию STL для моих пользовательских типов? На MSVC, есть класс std::tr1::hash
, который я могу частично специализировать с помощьюКак расширить std :: tr1 :: hash для пользовательских типов?
namespace std
{
namespace tr1
{
template <>
struct hash<MyType>
{ ... };
}
}
, но это рекомендуемый способ? Кроме того, это работает и с реализацией GCC? Для boost::hash
, этого достаточно, чтобы обеспечить бесплатную функцию size_t hash_value (const MyType&)
, есть ли что-то подобное для реализации TR1?
Есть ли способ расширить std :: hash для пользовательских типов с частными конструкторами копирования? Кроме того, есть ли способ расширить его с помощью оператора(), который принимает константу ref вместо val? –
В чем проблема со специализацией шаблона? Вы не берете копию своего объекта (вы передаете его по ссылкам), поэтому никаких проблем - и оператор() принимает const ref или значение, что бы вы ни хотели. Посмотрите на ответ Фила Нэша, который принимает объект как const ref. – Anteru