我有一個可以存盤擁有或借用的列舉,如下所示。它類似于std::borrow::Cow但實際上不提供寫時克隆功能。
use std::borrow::Borrow;
enum RefOrOwned<'a, B, T>
where
B: ?Sized,
T: Borrow<B>,
{
Ref(&'a B),
Owned(T),
}
它可以這樣使用:
fn main() {
let str = RefOrOwned::<str, String>::Ref("Hi :D");
}
我希望編譯器T為我推斷型別。我想到了使用std::borrow::ToOwnedtrait: if B: ToOwned<Owned = T>, thenT應該B::Owned默認設定為。這可能嗎?
uj5u.com熱心網友回復:
您可以將型別宣告為具有默認值<B as ToOwned>::Owned,除非實際使用默認值,否則B不需要實作:ToOwned
enum RefOrOwned<'a, B, T = <B as ToOwned>::Owned>
where
B: ?Sized,
T: Borrow<B>,
{
Ref(&'a B),
Owned(T),
}
但是,這僅在您明確指定型別時才有效,即RefOrOwned::<str>. 如果您將它們保留為推斷 ( RefToOwned::Ref("Hi :D")),則不會使用默認值。我認為在這種情況下沒有辦法強制默認。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537055.html
標籤:仿制药锈
上一篇:如何將webpack配置添加到single-spa生成的webpack組態檔[single-spa angular14]
