Хеш-функция C++11 для любого типа перечисления

Я пишу хеш-функцию для своего объекта. Я уже могу хэшировать контейнеры и комбинировать хэши благодаря универсальной хеш-функции для всех 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’

10
задан Community 23 May 2017 в 10:30
поделиться