我在连续的内存中有一堆类型化的数据,我得到了 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/