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