向类提供const变量

时间:2017-02-28 23:05:51

标签: c++ class oop templates const

假设我的哈希表有不同大小的单词,我想在不同的哈希表中跟踪不同大小的单词。而不是为20个不同的单词大小创建20个不同的哈希表文件,有没有办法通过类提供const?

动态分配不是一个选项,因为每个表项的指针变量将花费8个额外的字节。

template <//Is there a way to supply a const here to change the value of size?>
class HashTable
{
    static const int size = #;

    struct TableEntry
    {
        char words[size];
    }

}

1 个答案:

答案 0 :(得分:2)

允许使用积分模板参数:

template <int Size>
class HashTable ...

(我通常更喜欢size_t Size,但你需要包含一个定义它的标题,例如<cstddef>)。

另外,Obvlious船长有一个很好的观点,即考虑这种优化的大多数人实际上并没有对它们有所需要,而且只是陷入了一个概念上的担忧。如果你确实有需要,关于......

  

动态分配不是一个选项,因为每个表项的指针变量将花费8个额外的字节。

...还有其他选项,如果您不需要擦除元素,则特别容易实现。例如,您可以将文本存储在连续的内存区域中,如...

this\0that\0whatever\0huh\0

...然后将偏移存储到单个哈希表中的该区域。如果您知道输入数据不会超过64k,那么每个偏移量只需要2个字节。 4个字节允许最多4GB的字符串数据。对于更长的单词,您将浪费更少的空间用于未使用/空的哈希表桶,以便在文本存储在其他地方时进行平衡。