我正在研究一个八叉树实现,其中树节点使用它们的维度长度(作为 2 的幂)进行模板化:
template<long N>
struct node_t {
enum { DIM = 1 << N };
node_t<N+1> * parent;
node_t<N-1> * children[8];
long count;
}
并专门用于 N = 0(叶子)指向数据。
struct node_t<0> {
enum { DIM = 1 };
node_t<1> * parent;
data_t data;
long count;
}
(除此之外:我想我可能还需要一个不包括父指针的 N_MAX 特化,否则 C++ 会生成不断增加的 N 的类型?但这与我的问题并不真正相关。)
我想创建一个函数,它沿着我的八叉树占据的 3D 空间中的一条射线前进,所以表面上我可以只保留一个指向根节点(具有已知类型)的指针,并在每次从根节点遍历八叉树步。但是,我更喜欢“本地”选项,我可以在其中跟踪当前节点,以便尽可能从树的较低位置开始,从而避免不必要地遍历八叉树的上层节点。
但我不知道该类型指针可能是什么(或任何其他实现方式),因此我不会体验切片。
我不受模板的束缚,因为维度可以简单地实现为long const
. 但是我不知道如何使叶子具有与 inode 不同的子类型。
谢谢你的帮助!
更新
我想这样做而不是类似的原因是因为count
每个节点中的变量:如果计数为 0,我想跳过整个立方体,而不是浪费时间通过叶子我知道是空的。(这是针对光线追踪体素引擎的。)