如何创建一个std :: array包装类

时间:2016-11-27 04:36:45

标签: c++ arrays c++11 stl stdarray

背景:

我正在尝试为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我必须在实例化任何对象时立即指定大小。因此,如果我像我对矢量类一样创建了一个成员变量,那么我必须给这个数组对象一个大小。我希望用户使用类似的构造函数设置指定大小(例如MyArrayClass myArray(10))。我如何尝试实现此数组包装器?

1 个答案:

答案 0 :(得分:1)

  

我宁愿用户使用类似的东西来指定大小   构造函数设置为Vector的(例如MyArrayClass myArray(10))。怎么样   我可以尝试实现这个数组包装器吗?

std::array不同,std::vector的目的是在编译时指定大小。它的底层结构是一个普通的vanilla数组,在编译时需要大小。

如果它有用,我可以想到以下包装

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