如何使用Turbofish运算符实现通用特征

Gur*_*ngh 2 traits rust

我具有以下通用特征:

trait A<T> {
    fn foo(&self) -> T;
}
Run Code Online (Sandbox Code Playgroud)

我有下面的结构,它实现特质AStringusize

struct S;

impl A<String> for S {
    fn foo(&self) -> String {
        String::from("Hello world")
    }
}

impl A<usize> for S {
    fn foo(&self) -> usize {
        37
    }
}
Run Code Online (Sandbox Code Playgroud)

当我调用method时foo,我可以为变量指定类型,并且可以工作:

let value: usize = s.foo();
Run Code Online (Sandbox Code Playgroud)

但是,如何用turbofish运算符执行相同的操作?

我尝试了以下操作,但未成功:

let text = s::<usize>.foo();
let text = s.foo::<usize>();
let text = s.::<usize>foo();
Run Code Online (Sandbox Code Playgroud)

如何使用此运算符,而不是为变量提供类型?

Vla*_*eev 5

您无法执行此操作,因为“ turbofish”运算符是用于为某物指定通用参数的语法,但是您的方法不是通用的,即使它是在通用特征中定义的,因此也没有要指定的通用参数。

您可以做的是使用完全限定的语法来显式命名特征,这通用的:

let text = A::<usize>::foo(&s);
Run Code Online (Sandbox Code Playgroud)