gpt4 book ai didi

rust - 如何在 Rust 中使用动态调度来获取泛型特征?

转载 作者:行者123 更新时间:2023-12-03 11:28:10 25 4
gpt4 key购买 nike

我正在使用一个名为 RtspClient 的特征所以我可以创建不同的Stream具有不同 rtsp 客户端的对象:

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);
}
然后我像这样使用它:
struct Stream {
pub rtsp_client: Arc<Mutex<dyn RtspClient>>,
}
但我收到 RtspClient 的错误不能用作对象,因为 set_on_produce有泛型类型。
如何使用动态调度 rtsp_client并且仍然可以使用 set_on_produce 设置关闭回调?

最佳答案

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

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

  • Advanced Functions and Closures .
    您还可以将方法移动到不同的 trait,甚至让另一个 trait 自动实现可用于 dyn 的 trait。
    Playground demo

    关于rust - 如何在 Rust 中使用动态调度来获取泛型特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64019215/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com