Come posso consentire all'implementazione STL di prelevare i miei tipi personalizzati? Su MSVC, c'è una classe std::tr1::hash
, che posso parzialmente specializzato utilizzandoCome estendere std :: tr1 :: hash per i tipi personalizzati?
namespace std
{
namespace tr1
{
template <>
struct hash<MyType>
{ ... };
}
}
Ma è questo il modo consigliato? Inoltre, funziona anche con l'implementazione di GCC? Per boost::hash
, è sufficiente fornire una funzione gratuita size_t hash_value (const MyType&)
, c'è qualcosa di simile per l'implementazione TR1?
C'è un modo per estendere std :: hash per i tipi definiti dall'utente con i costruttori di copia privati? Inoltre, c'è un modo per estenderlo con un operatore() che prende un riferimento const invece di val? –
Qual è il problema con la specializzazione del modello? Non prendi una copia del tuo oggetto (lo passi per riferimenti), quindi nessun problema - e l'operatore() prende un valore const o valore, qualunque cosa tu voglia. Guarda la risposta di Phil Nash, che prende l'oggetto come const ref. – Anteru