是否可以定制reference
of a std::vector
。
直到 C++11 似乎可以通过Allocator
模板参数。
但现在不再了吗?
根据文档,http://en.cppreference.com/w/cpp/container/vector, reference
现在总是value_type
and value_type
始终是模板参数T
.
即使使用似乎也是不可能的allocator_traits
,
http://en.cppreference.com/w/cpp/memory/allocator_traits
有解决方法吗?
如果不是,是否意味着我必须专攻整个std::vector
如果我想要一个特殊的,可能会重现它的所有功能reference
基于分配器的类型?
如果是这样,一般来说所有这些限制的逻辑是什么?强制用户使用std::vector<T, A>
始终管理常规内存(其中,value_type = T
, reference = T&
and pointer = T*
?)
注意:我知道std::vector<bool>
争议。然而,这有点更笼统,因为原则上我需要一个自定义std::vector<RegularType, special_allocator<RegularType>>
主要是控制返回类型operator[](int)
到一个特殊的代理对象。
具体实现:我正在查看GCC 6.3.1的stdlib源并在std_vector.h
人们可以读到:
template<typename _Tp, ...>
class vector : ...{
...
public:
typedef typename _Alloc_traits::reference reference;
};
这似乎表明仍然可以通过allocator
(_traits
?).
根据文档,allocator
or the allocator_traits
不需要有reference
类型。
另外,我不知道如何自定义这种类型。
GCC不遵循标准吗?或者只是间接地allocator_traits<Allocator>::reference
被迫成为allocator_traits<Allocator>::value_type&
?