Как я должен представлять непрерывную последовательность принадлежащих мне элементов? - PullRequest
0 голосов
/ 26 октября 2018

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

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

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

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

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

Примечания:

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

1 Ответ

0 голосов
/ 26 октября 2018

Вы можете унаследовать 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 s из этого, отсекая владение.Не уверен, что это за или против

...