Я работаю над реализацией хэш-функций, в основном основанных на трюке Картера и Вегмана. Основываясь на размере входного пространства, используемое основное значение должно быть достаточно длинным, чтобы обеспечить надежный хэш, например. если я хочу хэш для uint32_t, я буду использовать Mersenne prime 2^61-1, и поэтому мне нужен uint64_t; для uint16_t мне также нужен uint64_t и т. д.Получение типа переменной на основе другого типа переменной в C++
До сих пор я реализовал его как шаблон с двумя типами, но поскольку я знаю, перед какими типами идут те, с которыми они были бы, было бы удобнее, если бы я мог реализовать это как шаблон с одним типом.
До сих пор I have something like:
template<typename T1, typename T2>
class Hash_CW2: public Hash<T1>{
protected:
T2 seeds[2];
[...]
void init(unsigned B, T2 seed0, T2 seed1);
public:
Hash_CW2(unsigned B, T2 seed0, T2 seed1);
[...]
virtual unsigned element(T1 j);
};
И я хотел бы иметь что-то вроде:
template<typename T1, typename T2=GET_TYPE(T1)>
class Hash_CW2: public Hash<T1>{
[...]
};
Любая идея, как это сделать? Является ли это возможным?
Большое спасибо!
Как об использовании [шаблона специализации] (http://www.cprogramming.com/tutorial/template_specialization.html)? Возможно, в сочетании с наследованием? –