【问题标题】:How to make trait aliases?如何制作特征别名?
【发布时间】:2020-11-09 04:26:46
【问题描述】:

我正在尝试为函数提供别名,这样每当我实现此 trait 时就不必编写它的签名:

type PhySend = Fn();
trait MyTrait {
    fn set_phy_send<F: PhySend>(callback: F);
}

但我明白了:

type aliases cannot be used as traits rustc(E0404)

那么,给特征/函数签名起别名是不可能的?每次实现这个 trait 的时候写这个签名会很无聊。

【问题讨论】:

    标签: rust


    【解决方案1】:

    这是因为别名可以是任何类型。尝试定义一个新的特征。

    trait your_function<T> : FnOnce() -> T {}
    
    impl<T, U> your_function<T> for U where U: FnOnce() -> T {}
    
    fn make_tea<F, T>(f: F) -> T
        where F: your_function<T>
    {
        f()
    }
    
    fn main() {
        make_tea(|| String::new());
    }
    
    

    【讨论】:

    • 这真的很好 - 基本上 trait 别名可以相对容易地通过自定义 trait + 全面 impl 对来模拟。
    猜你喜欢
    • 1970-01-01
    • 2017-11-14
    • 2021-08-01
    • 2015-07-29
    • 1970-01-01
    • 2013-05-04
    • 2011-01-10
    • 2015-11-20
    相关资源
    最近更新 更多