如何制作特征别名? [英] How to make trait aliases?

查看:34
本文介绍了如何制作特征别名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to give an alias to a function so I don't have to write its signature whenever I implement this trait:

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

但我明白了:

type aliases cannot be used as traits rustc(E0404)

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

So, is it impossible to give aliases to traits / function signatures? It'd be boring to write this signature every time I implement this trait.

推荐答案

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

It's because aliases can be any type. Try to define a new trait instead.

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

这篇关于如何制作特征别名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆