2016-11-27 25 views
1

背景:如何創建一個std ::陣列封裝類

我試圖創建一些我自己的包裝類的STL容器,所以我可以分開我的代碼基本實現。我已經做了小有一點位與我Vector類的包裝,像這樣:

Vector.h

template<typename type> 
    class Vector 
    { 
    public: 
     Vector(); 
     Vector(std::initializer_list<type> initializer); 
     Vector(int size, int defaultValue); 
     Vector(int size); 
     ~Vector(); 

     void PushBack(type itemToPushBack); 
     type AtPosition(int position); 

    private: 
     std::vector<type> m_collectionOfItems; 
    }; 

正如你所看到的,我有構造函數設置和我用std::vector作爲一個成員,這樣我可以只需在我自己的Vector類中調用std :: vector函數即可。

問題:

隨着std::array我得馬上specificy大小實例化的任何對象時。所以,如果我創建了一個成員變量,就像我對矢量類所做的那樣,我必須給這個數組對象一個大小。我寧願大小由用戶指定的使用一些類似的構造函數設置向量的(例如MyArrayClass myArray(10))。我怎麼可以嘗試和實現這個數組包裝?

+0

'的std :: array'包裝了一個靜態數組,所以必須在編譯時指定其尺寸。 std :: vector是一個數組,其大小在運行時動態確定。 –

+1

'std :: array',它與'std :: vector'的主要區別在於它的大小是在編譯時確定的,因此它不需要動態內存分配。如果你堅持包裝'std :: array',你的包裝應該有相同的屬性,否則它會在很大程度上擊敗這一點。 –

+0

標準容器已被設計爲儘可能互換。您可以更好地瞭解可以使用哪些通用函數使集裝箱代碼在集裝箱之間轉移。如果使用當前標準庫函數是不可能的,那麼這是不可行的。 – Galik

回答

1

我寧願大小由用戶指定使用一些類似的 構造器設置爲Vector的(例如MyArrayClass myArray(10))。 如何嘗試和實現這個數組包裝?

不同於std::vectorstd::array的目的是在編譯時指定大小。它的底層結構是一個普通的香草數組,它在編譯時需要大小。

我可以認爲以下的包裝的情況下,它是有用的

template <typename T, size N> 
class Array { 
    public: 
    // stuff 
    private: 
    std::array<T, N> array_; 
};