Я пишу хеш-функцию для своего объекта. Я уже могу хэшировать контейнеры и комбинировать хэши благодаря универсальной хеш-функции для всех STL-контейнеров. Но в моих классах также есть перечисления. Конечно, я могу создать хеш-функцию для каждого перечисления, но это не кажется хорошей идеей. Можно ли создать некоторую общую спецификацию для std::hash
, чтобы ее можно было применять к каждому перечислению? Примерно так, используя std::enable_if
и std::is_enum
namespace std {
template
class hash::value, E>::type> {
public:
size_t operator()( const E& e ) const {
return std::hash::type>()( e );
}
};
};
PS. Этот код не компилируется
error: template parameters not used in partial specialization:
error: ‘E’