Kor*_*nel 3 traits specialization generic-function rust
我想要为其参数类型优化一个函数的多个版本,并根据上下文调用适当的函数.
在我的例子中,所有参数都具有相同的类型,并且都是等价的,因此它宁可避免使用self参数.
我试过这段代码:
trait Foo<T> {
fn foo(a: T, b: T, c: T);
}
impl Foo<i32> {
fn foo(a: i32, b: i32, c: i32) {}
}
impl Foo<i16> {
fn foo(a: i16, b: i16, c: i16) {}
}
fn main() {
Foo::foo(1i32,2,3);
Foo::foo(1i16,2,3);
}
Run Code Online (Sandbox Code Playgroud)
但Rust需要类型注释:
错误:需要输入注释:无法解析
_ : Foo<i32>[E0283]
我可以避免在呼叫站点提供类型注释吗?如果必须,怎么办?
Vla*_*eev 10
请记住,你总是为某些东西实现一个特征.因此,特征实现必须始终包含for子句:
impl SomeTrait for Something
Run Code Online (Sandbox Code Playgroud)
如果没有for,那么它不是特质实现.你的情况impl Foo<i32>是不是的实现Foo为i32或任何你认为它是; 它是裸特征对象类型的固有方法声明子句. Foo<i32>
你真正想要的是使用Self类型参数:
trait Foo {
fn foo(a: Self, b: Self, c: Self);
}
impl Foo for i32 {
fn foo(a: i32, b: i32, c: i32) {}
}
impl Foo for i16 {
fn foo(a: i16, b: i16, c: i16) {}
}
fn main() {
Foo::foo(1i32,2,3);
Foo::foo(1i16,2,3);
}
Run Code Online (Sandbox Code Playgroud)
这段代码有效.
请注意,现在Foo已针对特定类型实施.通过隐式Self类型参数可以实现为特征实现的类型,您可以看到它在foo()声明中的使用方式.
| 归档时间: |
|
| 查看次数: |
1246 次 |
| 最近记录: |