我在T *
的连续内存中有一堆类型化数据;而且我还知道元素的数量(虽然没什么大不了,但还是个std::size_t
。
我想使用某种单一类型或数据结构来表示我键入的数据。
现在,我拥有的是用于构造的信息...
gsl::span<T>
,但拥有所有权。gsl::owner<T *>
,但有一个大小。我将使用哪种类型/结构/容器来表示有关此数据的所有信息?
注意:
owner
和span
的嵌合体-也许是gsl::owner<gsl::span<T>>
;但我不太喜欢这个主意。答案 0 :(得分: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;
};
一个注意事项:您仍然可以从中复制构造/分配gsl::span
,从而分割所有权。不确定是赞成还是反对