【发布时间】:2015-08-16 02:59:36
【问题描述】:
我正在研究哈希函数的实现,主要基于 Carter 和 Wegman 技巧。根据输入空间的大小,所使用的素数需要足够长以形成稳健的散列,例如如果我想要一个 uint32_t 的哈希值,我将使用梅森素数 2^61-1,因此我需要一个 uint64_t;对于 uint16_t,我还需要 uint64_t 等。
到目前为止,我已经将它实现为具有两种类型的模板,但是由于我事先知道哪些类型与哪些类型相配,因此如果我可以将其实现为具有单一类型的模板会更方便。
到目前为止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>{
[...]
};
知道怎么做吗?有可能吗?
非常感谢!
【问题讨论】:
-
使用template specialization怎么样?可能与继承相结合?