我正在尝试在Rust中实现B-Tree类,可以在b
的各种不同值实例化。我尝试过以下代码:
struct BTreeNode<T, b> {
vals: [Option<T>; b-1],
children: [Option<Box<BTreeNode<T, b>>>; b],
}
struct BTree<T, b> {
root: Option<BTreeNode<T, b>>,
}
但编译器(合理地)抱怨
src/two_three_tree.rs:2:15: 2:16 error: unresolved name `b` [E0425]
src/two_three_tree.rs:2 vals: [Option<T>; b-1],
^
...
src/two_three_tree.rs:2:15: 2:16 error: array length constant evaluation error: non-constant path in constant expression [E0250]
src/two_three_tree.rs:2 vals: [Option<T>; b-1],
^
...
看起来标准库中的B-Tree类只使用常量(这是一个合理的选择,因为B-Tree通常意味着最大限度地利用缓存;我只是想在一个更一般的方式)。这在当前版本的Rust中是否可行?如果没有,它会不可能?
(我想通过编写BTree<u32, 3>
创建一个2-3的u32s树,或者通过编写BTree<u32, 4>
创建一个2-3-4的u32s树
答案 0 :(得分:1)
首先,您使用b
作为类型,然后使用值作为数组的长度?我不确定你想要的是什么意思。
其次,必须在编译时知道数组的大小。由于您在编译时不知道数组的大小,因此最好使用Vector。