【发布时间】:2019-05-30 06:40:01
【问题描述】:
我有一个容器:
pub struct Foo<T> {
pub data: Box<[T]>,
}
我想要一种从现有切片中初始化新切片的方法:
impl<T> Foo<T> {
fn from_slice(slice: &[T]) -> Foo<T> {
Foo {
data: Box::new(/* something here */),
}
}
}
我想从任何类型的切片创建一个 Foo 实例,来自动态向量或静态字符串。
我想vec! 是一个宏是有原因的,但是有没有办法避免写一个?我想我可以做slice.to_vec().into_boxed_slice(),但创建一个Vec 作为克隆的代理似乎不太正确......
我没有在我的结构中使用Vec,因为data 在容器的生命周期内不应该改变大小。使用Vec 感觉不对,但我可能错了。
【问题讨论】:
-
我真的不明白请总是分享你做事的目标。为什么不只是
pub data: Vec<T>? -
数据属性不应该在我的容器的生命周期内增长或缩小,所以感觉不对。
-
为防止更改大小,您不应公开该字段。如果你想允许改变值,你可以实现
IndexMut。 -
谢谢!更重要的是我不想要任何开销......在 C++ 中,当更简单的类型完成这项工作时,我不会使用
std::vector。我猜是来自贫穷背景的坏习惯。 ;) -
您所指的数组类是静态大小的,也不适合所有情况。至于原始指针...在许多情况下,它们是您唯一的选择:1)您想要 C++ 的软语法优于 C 和 2)无法为您的每一位代码使用 STL 和/或动态分配写。但是感谢您居高临下的语气,它总是受到赞赏。我会看看 ndarray 的实现,作为我的玩具程序的参考,谢谢。
标签: rust