【发布时间】:2013-01-26 06:52:38
【问题描述】:
我正在研究一个八叉树实现,其中树节点使用它们的维度长度(作为 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 不同的子类型。
感谢您的帮助!
更新
我想这样做而不是类似于this 的原因是因为每个节点中的count 变量:如果计数为0,我想跳过整个多维数据集,而不是浪费时间浏览我知道是空的叶子。 (这是用于光线追踪体素引擎的。)
【问题讨论】: