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
基于字符串输入。
I get the type placeholder '_' is not allowed within types on item signatures
将关联类型指定为占位符时。
我相信这里存在一个误解;dyn AB<Prop = A>
and 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 = A>
在一根树枝上,并且dyn AB<Prop = B>
在另一个分支上并不具体,但可能应该将其打包在枚举下:
enum AOrB {
A(Box<dyn AB<Prop = A>>),
B(Box<dyn AB<Prop = B>>),
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)