首页 > 解决方案 > 我应该如何表示我拥有的连续元素序列?

问题描述

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

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

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

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

笔记:

标签: c++idiomsguideline-support-librarystd-span

解决方案


您可以继承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,从而切断所有权。不确定这是优点还是缺点


推荐阅读