[英]how can I create a throwaway mutable reference?
我試圖包裝一個向量來改變它的索引行為,這樣當發生越界訪問時,它不會恐慌,而是返回對虛擬值的引用,如下所示:
use std::ops::Index;
struct VecWrapper(Vec<()>);
impl Index<usize> for VecWrapper {
type Output = ();
fn index(&self, idx: usize) -> &() {
if idx < self.0.len() {
&self.0[idx]
} else {
&()
}
}
}
這對於 Index 的實現來說工作得很好,但是由於顯而易見的原因,嘗試以相同的方式實現 IndexMut 失敗了。 我的集合中的類型沒有 Drop 實現,因此不需要調用析構函數(釋放內存除外)。
我能想到的唯一解決方案是擁有一個包含數千個虛擬對象的 static 可變數組,並分發對該數組元素的引用,這是一個可怕的解決方案,但如果借用的虛擬對象數量超過了大小,它仍然會導致 UB static 數組。
為包裝器提供一個附加字段,即虛擬字段。 它具有相同的生命周期限制,因此不能使用別名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.