Как я должен представлять непрерывную последовательность принадлежащих мне элементов?

У меня есть куча типизированных данных в последовательной памяти, которые я получил как T *; и я также знаю количество элементов (как std::size_t хотя это не имеет большого значения).

Я хотел бы использовать какой-то один тип или структуру данных для представления моего участка типизированных данных.

Теперь, что у меня есть информация для построения …

  • gsl::span<T>, но с правом собственности.
  • gsl::owner<T *>, но с размером.

Какой тип / структуру / контейнер я бы использовал для представления всей моей информации об этих данных?

Заметки:

  • Очевидно, я в порядке с использованием конструкций GSL; вещи в C ++ 2a или Boost тоже хорошо.
  • Я думал о химере owner а также span — возможно gsl::owner<gsl::span<T>>; но мне не очень нравится эта идея.

0

Решение

Вы могли бы унаследовать gsl::span<T> и держать std::unique_ptr<T[]>

template <typename T, typename D = std::default_delete<T>>
struct owning_span : public gsl::span<T>
{
owning_span() {}
owning_span(T* ptr, index_type size, D d = {}) : span(ptr, size), m_ptr(ptr, std::move(d)) {}
owning_span(T* first, T* last, D d = {}) : span(first, last), m_ptr(first, std::move(d)) {}
// other constructors ?
private:
std::unique_ptr<T[], D> m_ptr;
};

Одно примечание: вы все еще можете скопировать конструкцию / назначить gsl::spanИз этого, отсекая владение. Не уверен, что это за или против

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]