Задний план:
Я пытаюсь создать несколько собственных классов-оболочек для контейнеров STL, чтобы я мог отделить реализацию от своей базы кода. Я уже немного поработал с оболочкой класса 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
в качестве члена, так что я могу просто вызывать функции std::vector в своих собственных классах Vector.
Проблема:
С std::array
я должен сразу указать размер при создании экземпляра любого объекта. Поэтому, если бы я создал переменную-член, как я сделал с моим векторным классом, мне пришлось бы указать размер этого объекта массива. Я бы предпочел, чтобы размер указывался пользователем с помощью настройки конструктора, аналогичной вектору (например, MyArrayClass myArray(10) ). Как я могу попытаться реализовать эту оболочку массива?
std::array
оборачивает статический массив, поэтому его размер должен быть указан во время компиляции.std::vector
— это массив, размер которого определяется динамически во время выполнения. - person Remy Lebeau   schedule 27.11.2016std::array
, его главное отличие отstd::vector
, заключается в том, что его размер определяется во время компиляции и, таким образом, не требует динамического выделения памяти. Если вы настаиваете на обертыванииstd::array
, ваша обертка должна иметь такое же свойство, в противном случае это в значительной степени лишило бы смысла. - person Igor Tandetnik   schedule 27.11.2016alloca
и его варианты нестандартны, и их следует избегать, если это вообще возможно, но их можно обернуть аналогичным образом. Он доступен в большинстве компиляторов, но НЕ является стандартным C++. - person doug   schedule 27.11.2016