![](/img/trans.png)
[英]I'm trying to write a class where the child class will inherit the methods from the parent class, but my code won't compile
[英]Can I inherit a template class and set the type to a templated subclass of the class I'm currently trying to inherit from?
可怕的頭銜,我知道。 我將說明:
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, bool write = false, int64_t chunkB = 65536) : MemMapFileStructured(fileName, write, chunkB) { }
};
如果您想繼續在主模板中使用kvp
類型,請成為我的訪客。 沒有人能夠分辨出來。 MemMapFileHashTable<ValType>::kvp
仍然是你期望的。 它可能是我們的小秘密,它真的是別的東西。
事實上,如果你在你的C ++編譯器的庫中徘徊,你可能會發現,比如說, std::vector<TYPENAME>::iterator
就是其他模板。 它一直在發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.