gpt4 book ai didi

rust - 具有默认类型的别名通用特征

转载 作者:行者123 更新时间:2023-11-29 08:08:46 26 4
gpt4 key购买 nike

我有一个通用的特征: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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com