我想在不创建对象的情况下检查一个类型是否实现了一个trait。但是它无法编译通过。请参见代码中的注释。那么我应该怎么做才能达到我的目标?
#![feature(specialization)]
struct T1;
struct T2;
trait A {}
impl A for T1 {}
trait Get_Static<TraitType> {
fn has_trait() -> bool ;
}
default impl<TraitType, T> Get_Static<TraitType> for T
{
fn has_trait() -> bool { false }
}
impl<TraitType, T> Get_Static<TraitType> for T where T:TraitType
{
fn has_trait() -> bool { true }
}//Compiler complains TraitType is not a trait but type parameter
fn main() {
if <T1 as Get_Static>::<A>::has_trait() {println!("{}", true)} else {println!("{}", false)}
if <T2 as Get_Static>::<A>::has_trait() {println!("{}", true)} else {println!("{}", false)}
//This is surely wrong syntax but I don't know the right syntax
}
Unsize
可以检查一个类型是否实现了一个 trait;不幸的是,这是 我找到的最远的进展。 - Matthieu M.<T1 as GetStatic<A>>
是什么意思,你是在创建对象还是直接调用“非实例”方法?因为我真的不想要一个T对象... - 炸鱼薯条德里克<Type as Trait>
,它是一种通用语法,用于获取Type
的Trait
实现,然后允许您调用Trait
的相关函数;在您的情况下,您正在请求T1
实现的GetStatic<A>
trait,因此使用<T1 as GetStatic<A>>
。 - Matthieu M.trait GetStatic<TraitType: ?Sized> {…}
- Stefan