Как я должен представлять непрерывную последовательность принадлежащих мне элементов?
У меня есть куча типизированных данных в последовательной памяти, которые я получил как T *
; и я также знаю количество элементов (как std::size_t
хотя это не имеет большого значения).
Я хотел бы использовать какой-то один тип или структуру данных для представления моего участка типизированных данных.
Теперь, что у меня есть информация для построения...
gsl::span<T>
, но с правом собственности.gsl::owner<T *>
, но с размером.
Какой тип / структуру / контейнер я бы использовал для представления всей моей информации об этих данных?
Заметки:
- Очевидно, я в порядке с использованием конструкций GSL; вещи в C++2a или Boost тоже хорошо.
- Я думал о химере
owner
а такжеspan
- возможноgsl::owner<gsl::span<T>>
; но мне не очень нравится эта идея.
1 ответ
Вы могли бы унаследовать 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
Из этого, отсекая владение. Не уверен, что это за или против