c++ - 我应该如何表示我拥有的连续元素序列?

标签 c++ idioms guideline-support-library std-span

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

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

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

  • A gsl::span<T> , 但拥有所有权。
  • A gsl::owner<T *> ,但有一个尺寸。

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

注意事项:

  • 显然我可以使用 GSL 结构; C++2a 或 Boost 中的东西也很好。
  • 我在想 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从此,分割所有权。不确定这是赞成还是反对

关于c++ - 我应该如何表示我拥有的连续元素序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52998453/

相关文章:

c++ - 在字符串中搜索序列。脱氧核糖核酸

c++ - 类型向量化的适当通用习惯用法?

swift - 在 swift 中执行 while == nil 最惯用的方法是什么?

c++ - 是否有可以与 GCC 4.9.x 一起使用的 GSL 实现?

c++ - 您是否打算从违反契约(Contract)中恢复过来?

c++ - CreateHwndRenderTarget引发异常:读取访问冲突。 **这**是nullptr

c++ - 无法使用 wininet 获取 POST 请求响应

java - 使用 SWIG 引用外部库中的特定类

string-view - gsl::string_span 和 std::string_view 有何不同?