¿Cómo permito que la implementación de STL recupere mis tipos personalizados? En MSVC, hay una clase std::tr1::hash
, que pueden especializarse en parte mediante el uso de¿Cómo extender std :: tr1 :: hash para tipos personalizados?
namespace std
{
namespace tr1
{
template <>
struct hash<MyType>
{ ... };
}
}
pero es esta la forma recomendada? Además, ¿esto también funciona con la implementación de GCC? Para boost::hash
, es suficiente para proporcionar una función gratuita size_t hash_value (const MyType&)
, ¿hay algo similar para la implementación de TR1?
¿Hay alguna manera de extender std :: hash para los tipos definidos por el usuario con constructores de copia privada? Además, ¿hay alguna manera de extenderlo con un operador() que toma una referencia ref en lugar de val? –
¿Cuál es el problema con la especialización de plantillas? No tomas una copia de tu objeto (lo pasas por referencias), así que no hay problema, y el operador() toma una referencia o valor, lo que quieras. Mire la respuesta de Phil Nash, que toma el objeto como const ref. – Anteru