c – 我可以继承模板类并将类型设置为我正在尝试继承的类的模板
发布时间:2020-12-16 07:15:31 所属栏目:百科 来源:网络整理
导读:可怕的头衔,我知道.我将说明: template typename ValType struct MemMapFileHashTable : MemMapFileStructuredMemMapFileHashTableValType::kvp { struct kvp { uint32_t key; ValType val; }; MemMapFileHashTable(const char* fileName,bool write = fals
可怕的头衔,我知道.我将说明:
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又具有一个具有特定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,chunkB) { } }; 如果您想继续在主模板中使用kvp类型,请成为我的访客.没有人能够分辨出来. MemMapFileHashTable< ValType> :: kvp仍然是你期望的.它可能是我们的小秘密,它真的是别的东西. 事实上,如果你在你的C编译器的库捅,你可能会发现,之类的东西,哦,说的std ::矢量< TYPENAME> :: iterator是真的其他一些模板.它一直在发生. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |