如何创建 std::array 包装器 class
How to create a std::array wrapper class
背景:
我正在尝试为 STL 容器创建一些我自己的包装器 classes,这样我就可以将实现与我的代码库分开。我已经对我的 Vector class 包装器做了一些操作,如下所示:
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 class 中调用 std::vector 函数。
问题:
使用 std::array
我必须在实例化任何对象时立即指定一个大小。因此,如果我像使用向量 class 那样创建一个成员变量,我将不得不为该数组对象指定一个大小。我宁愿用户使用一些类似于 Vector 的构造函数设置来指定大小(例如 MyArrayClass myArray(10) )。我该如何尝试实现这个数组包装器?
I would rather the size be specified by the user using some similar
constructor setup to Vector's (ex. MyArrayClass myArray(10) ). How
might I try and implement this Array wrapper?
与std::vector
不同,std::array
的目的是在编译时指定大小。它的底层结构是一个普通数组,需要在编译时确定大小。
我可以想到下面的包装器,以防它有用
template <typename T, std::size_t N>
class Array {
public:
// stuff
private:
std::array<T, N> array_;
};
背景:
我正在尝试为 STL 容器创建一些我自己的包装器 classes,这样我就可以将实现与我的代码库分开。我已经对我的 Vector class 包装器做了一些操作,如下所示:
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 class 中调用 std::vector 函数。
问题:
使用 std::array
我必须在实例化任何对象时立即指定一个大小。因此,如果我像使用向量 class 那样创建一个成员变量,我将不得不为该数组对象指定一个大小。我宁愿用户使用一些类似于 Vector 的构造函数设置来指定大小(例如 MyArrayClass myArray(10) )。我该如何尝试实现这个数组包装器?
I would rather the size be specified by the user using some similar constructor setup to Vector's (ex. MyArrayClass myArray(10) ). How might I try and implement this Array wrapper?
与std::vector
不同,std::array
的目的是在编译时指定大小。它的底层结构是一个普通数组,需要在编译时确定大小。
我可以想到下面的包装器,以防它有用
template <typename T, std::size_t N>
class Array {
public:
// stuff
private:
std::array<T, N> array_;
};