我正在尝试编写一个四叉树稀疏矩阵类。简而言之,aquadtree_matrix<T>
要么是零矩阵,要么是 的四元(ne, nw, se, sw)
组quadtree_matrix<T>
。
我想最终测试不同的分配方案,因为这可能会影响线性代数运算的性能。因此,我还将quadtree_matrix
在标准分配器类型上进行模板化,以便我可以重用现有的分配器。
我将不得不分配两种不同类型的数据: aT
或 a node
,其中包含四个指针(指向 T 或节点)。对于我将考虑的所有算法,我确切地知道期望什么样的数据,因为我知道在算法的任何时候我所面临的子矩阵的大小是多少(我什至不需要存储这些大小)。
我当然会使用两种不同的分配器:这没关系,因为分配器类型提供rebind
模板和模板复制构造函数(并且旨在用作值类型,正如get_allocator
标准容器的成员通过返回副本所建议的那样)。
问题是分配器成员函数使用某种pointer
类型,它不需要是普通指针。一些分配器(增强进程间分配器)广泛使用此功能。
如果分配器指针类型是花园品种指针,我不会有任何问题:至少,我可以使用指向 void 的指针并将它们重新解释为正确的类型(node*
或T*
)。我也可以使用联合(可能更好)。
据我所知,对类型的 POD 没有要求allocator::pointer
。它们只需要是随机访问迭代器。
现在,我的问题是:
给定一个分配器类模板A<T>
(或其等价物A::rebind<T>::other
),是否有任何保证:
- 提供的静态转换能力
A<T>::pointer
是一个可访问的基础?A<U>::pointer
U
T
- 提供静态强制转换的能力
A<T>::pointer
是可访问的基础,并且被继承人的“运行时类型”(无论这在此上下文中意味着什么)是?A<U>::pointer
T
U
U
- 类型
A<void>::pointer
(如果这有意义的话)?
或者有没有我没有想到的问题的解决方案?