Я могу заменить фактическую реализацию std::hash
с моим собственным определением std::hash
в С ++ 11?
Я имею в виду из моей кодовой базы, не касаясь стандартной библиотеки.
Я не вижу никакой пользы для виртуальной функции / полиморфизма в этом случае, поэтому я полагаю, что я все равно не могу изменить определение std :: hash?
Да, все в порядке, и вам не нужно каким-либо образом изменять стандартную библиотеку, просто используйте специализацию шаблонов:
namespace std
{
template<>
struct hash<YourSpecialType>
{
// ...
};
}
Вы можете специализировать хеш для определенных типов.
Увидеть Вот а также Вот например как это
namespace std {
template <> struct hash<Foo>
{
size_t operator()(const Foo & x) const
{
/* your code here, e.g. "return hash<int>()(x.value);" */
}
};
}
Если вы думаете, что можете сделать лучше, чем разработчики библиотек для существующих версий, вы либо
1. неправильно
или же
2. умный