[英]Which Rust 1.2 containers support trait objects?
在Rust Edition指南中,它表示在Rust 1.2中, 更多容器類型支持特征對象 。 它給出了Rc<T>
的例子,但沒有給出完整的清單。 什么其他容器支持Rust 1.2+中的特征對象?
支持特征對象的容器是在容器類型上具有?Sized
限制的容器。
默認情況下使用泛型,所有類型的Sized
含蓄,因為這是你最想要的什么時間,並增加了Sized
幾乎每一個通用將是煩人。 此行為與其他特征不同,可以通過添加?Sized
邊界來避免。
struct Foo<T>; // implicit `T: Sized` bound. T cannot be a trait object.
struct Bat<T: ?Sized>; // T can be a trait object.
您可以在存儲庫中看到Rc
確實曾經被聲明為pub struct Rc<T>
,后來更改為pub struct Rc<T: ?Sized>
。 GitHub將此更改列為Rust 1.1的一部分,但我想我們必須等待1.2以使其保持穩定。
處理特征對象的其他容器是Box
, Arc
, Cell
和這些智能指針的所有類似物。
不適用於特征對象的容器是Vec
, HashMap
以及通常可以存儲多個實例(集合)的容器。 這是因為相同特征對象的2個實例可能具有不同的大小(如果它們具有不同的具體類型),並且集合通常連續存儲元素,需要恆定的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.