Rust中自定义数据类型的大小类型参数?

时间:2016-04-16 00:52:41

标签: data-structures rust b-tree

我正在尝试在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树

1 个答案:

答案 0 :(得分:1)

首先,您使用b作为类型,然后使用值作为数组的长度?我不确定你想要的是什么意思。

其次,必须在编译时知道数组的大小。由于您在编译时不知道数组的大小,因此最好使用Vector。