[英]Returning a trait with an associated type
struct A;
struct PropA;
struct B;
struct PropB;
trait AB{
type prop;
fn a(&self) -> ();
fn b(&self, p: Self::prop) -> ();
}
impl AB for A{
type prop = PropA;
fn a(&self)->(){}
fn b(&self, p: Self::prop) -> (){}
}
impl AB for B{
type prop = PropB;
fn a(&self)->(){}
fn b(&self, p: Self::prop) -> (){}
}
fn get_a_or_b(s: &str) -> Option<Box<dyn AB<prop=_>>>{
match s{
"a" => Some(Box::new(A)),
"b" => Some(Box::new(B)),
_=> None
}
}
我根據字符串輸入返回兩個不同的結構A
和B
當將關聯類型指定為占位符時,我得到the type placeholder '_' is not allowed within types on item signatures
。
我相信這里有一個誤解; dyn AB<Prop = A>
和dyn AB<Prop = B>
是不同的類型,第一個是動態AB<Prop = A>
,第二個是動態AB<Prop = B>
。 這意味着您不能將泛型類型和關聯類型留給動態方面。
這與未提及關聯類型時不同:
fn foo<T: AB>() {
let my_fn: fn(&T, T::Prop) = T::b;
}
我們在哪里訪問T::Prop
而不是分配它。
所有類型都必須是具體的,並且一個分支上的 dyn AB<Prop = dyn AB<Prop = A>
> 和另一個分支上的dyn AB<Prop = B>
不是具體的,但是如果您將 package 放在枚舉下,則可能是:
enum AOrB {
A(Box<dyn AB<Prop = A>>),
B(Box<dyn AB<Prop = B>>),
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.