Информация об изменениях

Сообщение Re[6]: сопоставление сигнатур от 02.11.2017 15:36

Изменено 02.11.2017 22:48 niXman

Re[6]: сопоставление сигнатур
остается делать специализации для фундаментальных и стандартных типов, и для юзерских...

думаю сделать так:
template<typename>
struct my_typeid;

template<>
struct my_typeid<bool> {
    enum: std::uint32_t { id = fnvia("bool") };
};

template<>
struct my_typeid<std::int8_t> {
    enum: std::uint32_t { id = fnvia("std::int8_t") };
};

макросы все упрощают...


вопрос в том, как мне суммировать id`ы, полученные при хешировании?
т.е. предполагаю что-то вроде:
constexpr std::uint32_t sig_id() { return 0; }

template<typename Arg0, typename... Args>
constexpr std::uint32_t sig_id(const Arg0&, const Args&... args) {
    constexpr std::uint32_t id = my_typeid<Arg0>::id + sig_id(args...);
}

увеличит ли простое суммирование вероятность коллизий?
Re[6]: сопоставление сигнатур
остается делать специализации для фундаментальных и стандартных типов, и для юзерских...

думаю сделать так:
template<typename>
struct my_typeid;

template<>
struct my_typeid<bool> {
    enum: std::uint32_t { id = fnv1a("bool") };
};

template<>
struct my_typeid<std::int8_t> {
    enum: std::uint32_t { id = fnv1a("std::int8_t") };
};

макросы все упрощают...


вопрос в том, как мне суммировать id`ы, полученные при хешировании?
т.е. предполагаю что-то вроде:
constexpr std::uint32_t sig_id() { return 0; }

template<typename Arg0, typename... Args>
constexpr std::uint32_t sig_id(const Arg0&, const Args&... args) {
    constexpr std::uint32_t id = my_typeid<Arg0>::id + sig_id(args...);
}

увеличит ли простое суммирование вероятность коллизий?