首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以创建对函数的泛型类型具有特征界限的类型别名?

是否可以创建对函数的泛型类型具有特征界限的类型别名?
EN

Stack Overflow用户
提问于 2016-06-17 00:14:47
回答 2查看 7.8K关注 0票数 10

此代码:

代码语言:javascript
复制
pub type Foo<T: Read> = fn(bar: T);

产生误差E0122 (在较新版本的Rust中,它只是一个警告):

尝试向类型别名添加泛型约束。这个约束被完全忽略了。为了向后兼容,Rust仍然允许这样做,并发出警告。考虑下面的例子: 特质Foo {}类型MyType = (R,());fn main() { let t: MyType;} 我们可以声明一个类型为MyType<u32>的变量,尽管u32没有实现Foo。因此,应该避免与类型别名协同使用泛型约束。

是否可以在函数指针上创建包含特征要求的类型别名?显然,编译器对类型的选择是否定的,但不知道是否有另一个函数是我没有想到的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-20 18:14:04

在这个时候,这似乎是不可能的,也没有解决办法。

票数 6
EN

Stack Overflow用户

发布于 2020-11-02 00:37:28

对于任何对此仍感兴趣的人来说,从Rust 1.47.0开始,这仍然是不可能的,但看起来你得到了一个很好的警告信息,并给出了描述和建议的替代方案。例如:

代码语言:javascript
复制
pub type PublishQueue<T: From<Message>> = (tokio::sync::mpsc::Sender<T>);

收益率

代码语言:javascript
复制
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>;
|
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37871267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档