gpt4 book ai didi

c++ - 我可以继承模板类并将类型设置为我当前尝试继承的类的模板化子类吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:16:04 25 4
gpt4 key购买 nike

糟糕的标题,我知道。我将举例说明:

template <typename ValType> struct MemMapFileHashTable : MemMapFileStructured<MemMapFileHashTable<ValType>::kvp> {
struct kvp {
uint32_t key;
ValType val;
};

MemMapFileHashTable(const char* fileName, bool write = false, int64_t chunkB = 65536) : MemMapFileStructured(fileName, write, chunkB) { }
};

所以我的想法是,我创建一个具有特定 ValType 的哈希表,该哈希表又具有具有特定 ValType 的 kvp。

要使用我正在继承的类,我需要将 kvp 设置为类型说明符,但是由于 kvp 是在哈希表类中声明的,所以我不允许这样做。有没有办法说服它呢?

我想我可以在哈希表中创建一个 MemMapFileStructured 实例,但我想这将是我构建的类行中的第 5 个连续继承,我不想破坏我的工作。

最佳答案

您可以使用额外的声明和 typedef 获得相同的结果.示例:

template<typename ValType> struct kvp_t {
uint32_t key;
ValType val;
};

template <typename ValType> struct MemMapFileHashTable : MemMapFileStructured<kvp_t<ValType>> {

typedef kvp_t<ValType> kvp;

MemMapFileHashTable(const char* fileName, bool write = false, int64_t chunkB = 65536) : MemMapFileStructured(fileName, write, chunkB) { }
};

如果你想继续使用类型 kvp在你的主模板中,做我的客人。没有人能够分辨出区别。 MemMapFileHashTable<ValType>::kvp仍将是你期望的样子。这可能是我们的小 secret ,它真的是另一回事。

事实上,如果你浏览一下 C++ 编译器的库,你可能会发现,哦,比如说 std::vector<TYPENAME>::iterator。实际上是其他模板。它一直在发生。

关于c++ - 我可以继承模板类并将类型设置为我当前尝试继承的类的模板化子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35375708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com