此代码:
pub type Foo<T: Read> = fn(bar: T);
产生error E0122(在较新版本的Rust中,它只是一个警告):
尝试向类型别名添加通用约束。这个 约束完全被忽略。为了向后兼容,Rust 仍然允许这个警告。请考虑以下示例:
trait Foo {} type MyType<R: Foo> = (R, ()); fn main() { let t: MyType<u32>; }
尽管事实如此,我们仍然可以声明
MyType<u32>
类型的变量u32
未实施Foo
。因此,应该避免使用 与类型别名一致的通用约束。
是否可以创建一个包含函数指针特征要求的类型别名?显然,编译器告诉我没有类型,但不知道是否有其他选项用于我没想到的函数。
答案 0 :(得分:2)
对于从Rust 1.47.0开始仍然对此感到好奇的任何人,仍然不可能,但是看起来您会收到一条带有说明和建议替代方法的漂亮警告消息。 例如
pub type PublishQueue<T: From<Message>> = (tokio::sync::mpsc::Sender<T>);
收益
note: `#[warn(type_alias_bounds)]` on by default
help: the bound will not be checked when the type alias is used, and should be removed
|
| pub type PublishQueue<T> = sync::mpsc::Sender<T>;
|
答案 1 :(得分:0)
此时,似乎不可能,也没有解决方法。