簡體   English   中英

Class 方法專業化

[英]Class Method Specialization

當前使用 g++-11.3.0,C++20。

我試圖讓這個 class 在構造時接受兩個參數:一個指向 memory 預分配塊的空指針,以及 memory 塊的大小。 class 然后通過調用next()方法遍歷數據塊,該方法返回數據塊中下一個可用槽的引用,包含在指定類型T中。

class DataArrayIterator
{
private:
    
    void* data;
    size_t maxSize;
    size_t size;

public:

    template<typename T>
    T& next<T>()
    {
        assert(sizeof(T) + size <= maxSize);

        size_t offset = size;

        size += sizeof(T);

        return *((T*)(static_cast<char*>(data) + offset));
    }

    DataArrayIterator(void* data, size_t maxSize)
      :  data{data}, maxSize{maxSize}, size{0}
    {

    }
};

編譯代碼給我錯誤non-class, non-variable partial specialization 'next<T>' is not allowed 我能做些什么來盡可能地模仿相同的功能嗎? 還是有更合適的選擇?

在這種情況下您不需要任何部分特化,只需引入一個 function 模板:

template<typename T>
T& next() {
    ... // implementation goes here
}

並在需要時實例化 function:

auto i = 8;
// val is an int reference with value of 8
auto& val = DataArrayIterator{ &i, sizeof(i) }.next<int>(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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