如何制作特征别名?

Gue*_*OCs 1 rust

我试图给一个函数一个别名,这样每当我实现这个特性时我就不必写它的签名:

type PhySend = Fn();
trait MyTrait {
    fn set_phy_send<F: PhySend>(callback: F);
}
Run Code Online (Sandbox Code Playgroud)

但我得到:

type aliases cannot be used as traits rustc(E0404)
Run Code Online (Sandbox Code Playgroud)

那么,是不是不可能给特征/函数签名赋予别名?每次我实现这个特性时都写这个签名会很无聊。

Ser*_*nes 5

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

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());
}

Run Code Online (Sandbox Code Playgroud)