如何在Rust中绕过对象安全

utugiqy6  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(99)

我不是特别熟悉Rust unsafe是如何使用的,但是,本质上,我需要能够创建一个动态trait对象(当它以trait对象的形式存在时,它的方法永远不会被调用,因为它会被向下转换),但是我需要使对象脱离的trait具有Sized作为超级trait,这意味着,为了对象安全,我不能创建动态类型。
我不能创建自己的trait,因为trait是由一个我不是作者的crate定义和使用的,所以我想知道是否有某种方法可以绕过trait对象的对象安全要求。
或者,如果有一些等价于pyo 3的IntoPy<Py<PyTuple>>,它没有Sized作为超特征,但可以用作参数来调用pyo3中的python函数,这也可以工作。

ni65a41a

ni65a41a1#

如果你想用一个值来创建一个trait对象,但你只需要向下转换它,这听起来很像你想把Any用作Box<dyn Any>。这个trait有一个downcast方法,你可以尝试把值转换为一个具体的类型。

相关问题