此代码:
pub type Foo<T: Read> = fn(bar: T);产生误差E0122 (在较新版本的Rust中,它只是一个警告):
尝试向类型别名添加泛型约束。这个约束被完全忽略了。为了向后兼容,Rust仍然允许这样做,并发出警告。考虑下面的例子: 特质Foo {}类型MyType = (R,());fn main() { let t: MyType;} 我们可以声明一个类型为
MyType<u32>的变量,尽管u32没有实现Foo。因此,应该避免与类型别名协同使用泛型约束。
是否可以在函数指针上创建包含特征要求的类型别名?显然,编译器对类型的选择是否定的,但不知道是否有另一个函数是我没有想到的。
发布于 2016-06-20 18:14:04
在这个时候,这似乎是不可能的,也没有解决办法。
发布于 2020-11-02 00:37:28
对于任何对此仍感兴趣的人来说,从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>;
|https://stackoverflow.com/questions/37871267
复制相似问题