c++ - 我应该如何表示我拥有的连续元素序列?
问题描述
我在连续的内存中有一堆类型的数据,我得到了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;
};
注意:您仍然可以从中复制construct / assign gsl::span
s,从而切断所有权。不确定这是优点还是缺点
推荐阅读
- outlook - 使用 Outlook 配置 Roundcube 时出现 CORB 问题
- r - 取数据框中三行的平均值并在忽略缺失值的情况下找到平均值
- gitlab - .gitlab-ci.yml 如何修复这个配置更好 *gitlab-tunner without docker"
- python - 从 pandas.dtypes.to_dict() 中剥离 dtype 的任何简单方法?
- git - Satis - 文件协议库
- asp.net-core - IFormfile 不发送最新文件
- qt - 我应该如何在 Pyside6 应用程序中使用 Material Design?
- node.js - 尝试使用请求登录 Nike
- angularjs - 如何访问控制器 $init 函数内的 AngularJs 组件 templateUrl 变量?
- python - 如何让一组代码运行一定次数?