Re: сопоставление сигнатур
От: Кодт Россия  
Дата: 27.10.17 11:08
Оценка: 13 (2) +1
Здравствуйте, niXman, Вы писали:

X>какие мысли?


Смириться с рантаймом, — потому что вытащить __func__ в чистый компайлтайм может быть сложно.
Можно ускорить расчёт хешей через мемоизацию.
template<class... Args> size_t eval_types_hash() {
  return hash_value(__func__); // TODO: выдрать из буста hash_value(const (&char)[N])
}
template<class... Args> size_t types_hash() {
  static const size_t h = eval_types_hash<Args...>();
  return h;
}


Чтобы не хранить кучу строк, — можно разбить на типы
template<class Arg> size_t eval_type_hash() {
  return hash_value(__func__);
}
template<class Arg> size_t type_hash() {  // для часто используемых типов можно специализировать
  static const size_t h = eval_type_hash<Arg>();
  return h;
}

template<class... Args> size_t eval_types_hash() {
  return hash_value(initializer_list<size_t>{type_hash<Args>...});  // TODO: написать самому, если в бусте нет
}
template<class... Args> size_t types_hash() {
  static const size_t h = eval_types_hash<Args...>();
  return h;
}


Вот, наверно, как-то так.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.