首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用动态调度在锈蚀中的性状与泛型?

如何使用动态调度在锈蚀中的性状与泛型?
EN

Stack Overflow用户
提问于 2020-09-23 00:02:39
回答 1查看 197关注 0票数 2

我使用一个名为RtspClient的特性,以便使用不同的rtsp客户端创建不同的Stream对象:

代码语言:javascript
复制
pub trait RtspClient {
    fn url(&self) -> Option<String>;
    fn username(&self) -> Option<String>;
    fn password(&self) -> Option<String>;
    fn connect(&self) -> Result<(), RtspClientError>;
    fn disconnect(&self) -> Result<(), RtspClientError>;
    fn set_on_produce<F: Fn(EncodedPacket)>(&self, f: F);
}

然后我就这样用它:

代码语言:javascript
复制
struct Stream {
    pub rtsp_client: Arc<Mutex<dyn RtspClient>>,
}

但我得到的错误是,RtspClient不能用作对象,因为set_on_produce具有泛型类型。

如何为rtsp_client使用动态调度,并且仍然能够使用set_on_produce设置闭包回调

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-23 01:46:03

可以将函数的签名更改为接受:

  • 引用dyn&dyn Fn(EncodedPacket)
  • 一种盒装dynBox<dyn Fn(EncodedPacket)>,用于存储而不是(或附加)立即使用
  • 函数指针fn(EncodedPacket),它不允许跟踪状态

高级函数和闭包

您还可以将该方法移动到另一个特性,甚至可以让其他特性自动实现使用dyn的特性。

操场演示

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64019215

复制
相关文章

相似问题

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