小编Est*_*ter的帖子

在C++中基于另一个变量类型派生变量类型

我正在研究散列函数的实现,主要基于Carter和Wegman技巧.基于输入空间的大小,使用的素数需要足够长以产生健壮的散列,例如,如果我想要uint32_t的散列,我将使用Mersenne prime 2 ^ 61-1,因此我需要一个uint64_t ; 对于uint16_t我还需要uint64_t等.

到目前为止,我已经将它实现为具有两种类型的模板,但由于我事先知道哪些类型与哪些类型一起使用,如果我可以将其实现为具有单一类型的模板将更方便.

到目前为止我有类似的东西:

    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);
};
Run Code Online (Sandbox Code Playgroud)

我希望有类似的东西:

    template<typename T1, typename T2=GET_TYPE(T1)>
    class Hash_CW2: public Hash<T1>{
        [...]
};
Run Code Online (Sandbox Code Playgroud)

知道怎么做吗?可能吗?

非常感谢!

c++ hash templates

2
推荐指数
1
解决办法
67
查看次数

标签 统计

c++ ×1

hash ×1

templates ×1