Здравствуйте, 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;
}
Вот, наверно, как-то так.