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