簡體   English   中英

我可以繼承模板類並將類型設置為我正在嘗試繼承的類的模板化子類嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM