我有一个通用的特征:trait Trait<T>
,我想创建另一个指定通用的特征:type Alias = Trait<String>
。这将允许impl Alias for T
,而不必指定类型参数。我尝试了几种方法来做,但没有找到任何可行的方法。
这不是Type alias for multiple traits或Aliasing trait with associated types的副本,因为执行trait Alias: Trait<T>
要求人们无论如何都要实现Trait<T>
。我想提供一个隐藏泛型的特征。
更清晰的代码示例:
trait DefaultEvents = Events<UserStruct, ChannelStruct, IrcStruct>;
struct MyHandler;
impl DefaultEvents for MyHandler {
...
}
最佳答案
这是我最好的建议,这意味着您将需要做更多的工作(具有大量的手动特征继承),但它应该可以实现您想要的用户便利性。
pub mod user_friendly {
pub trait GivesNum<T> {
fn get_num(&self) -> T;
}
pub trait GivesDouble {
fn get_double(&self) -> f64;
}
impl<S> GivesNum<f64> for S where S: GivesDouble {
fn get_num(&self) -> f64 { self.get_double() }
}
}
// now your library's user needs to do less
use user_friendly::*;
struct MyStruct { num: f64 }
impl GivesDouble for MyStruct {
fn get_double(&self) -> f64 { 2.0 * self.num }
}
fn main() {
let s = MyStruct{ num: 5.0 };
println!("MyStruct.get_num() = {}", s.get_num());
}
Try it on Rust Playground
关于rust - 具有默认类型的别名通用特征,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36799180/