如何使用Rust for trait中的动态调度来处理泛型?

如何使用Rust for trait中的动态调度来处理泛型?,rust,Rust,我正在使用一个名为RtspClient的特性,以便可以使用不同的rtsp客户端创建不同的流对象: pub trait RtspClient { fn url(&self) -> Option<String>; fn username(&self) -> Option<String>; fn password(&self) -> Option<String>; fn connect(&am

我正在使用一个名为RtspClient的特性,以便可以使用不同的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不能用作对象,因为集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合集合


如何为rtsp_客户端使用动态调度,并且仍然能够使用set_on_product设置关闭回调?

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

对dyn的引用,&dyn FNCodedpacket, 一种盒装的箱子,用于储存而不是立即使用,或用于补充使用 函数指针FNECODEDPACKET,不允许跟踪状态 看

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