c++ - 自定义 std::allocator_traits::construct
问题描述
我想自定义std::vector
行为以不默认构造元素类型(例如int
),因为对于大型向量执行此操作很昂贵。
看着这个,我能看到的唯一方法就是专业化std::allocator_traits<MyAllocator>::construct
。但是,这似乎是不可能的,因为特化必须与原始声明在同一个命名空间中。
投入专业化namespace std
似乎并不正确。它实际上比这更糟糕,因为我使用的 STL 实现实际上放入std::allocator_traits
了namespace std::__u
(而且这肯定会因 STL 实现而异),所以这样做似乎是非常错误的。
这令人困惑,因为似乎 std::allocator_traits 旨在允许专业化,但我无法弄清楚如何实际做到这一点。这只是一个坏主意吗?如果是这样,是否有其他方法可以解决问题(避免在 STL 容器中默认构造元素)?
解决方案
不仅允许专门化标准库特征类,而且是提供此类功能的主要方式。但是,在这种特殊情况下,这是不必要的。
默认std::allocator_traits<T>::construct
实现(T
您的分配器类型在哪里,而不是正在使用的容器的值类型)将调用if的construct
成员函数具有这样的功能,并且它调用放置 -如果没有适当的成员。所以只需给你的分配器一个成员,你应该没问题。T
T
new
T
construct
推荐阅读
- r - 我想查看日期的频率,因为它们显示为一周中的几天以及每小时
- java - Spring Boot - 返回带有对象数组的 JSON
- php - 文件目录和下载文件 URL 错误
- java - 查询之间的mongo jpa
- reactjs - 如何在动态控件上管理 DatePicker onSelectDate 道具
- package - 歧管 2 激活失败
- reactjs - .js 文件上的 eslint 错误
- java - 我想自定义 android youtube player api 的布局
- javascript - Vega Charts 抛出类型定义错误
- vba - 用于创建多个 PDF 的 VBA