簡體   English   中英

哪個Rust 1.2容器支持特征對象?

[英]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以使其保持穩定。

處理特征對象的其他容器是BoxArcCell和這些智能指針的所有類似物。

不適用於特征對象的容器是VecHashMap以及通常可以存儲多個實例(集合)的容器。 這是因為相同特征對象的2個實例可能具有不同的大小(如果它們具有不同的具體類型),並且集合通常連續存儲元素,需要恆定的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM