0

我在连续的内存中有一堆类型的数据,我得到了T *; 而且我也知道元素的数量(std::size_t虽然它并不重要)。

我想使用一些单一类型或数据结构来表示我的类型数据。

现在,我所拥有的是用于构建的信息......

  • A gsl::span<T>,但有所有权。
  • A gsl::owner<T *>,但有大小。

我将使用什么类型/结构/容器来表示有关此数据的所有信息?

笔记:

  • 显然我可以使用 GSL 构造;C++2a 或 Boost 中的东西也很好。
  • owner我在想一个和span——也许是的嵌合体gsl::owner<gsl::span<T>>;但我不太喜欢这个主意。
4

1 回答 1

2

您可以继承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;
};

注意:您仍然可以从中复制construct / assign gsl::spans,从而切断所有权。不确定这是优点还是缺点

于 2018-10-25T21:56:09.120 回答