我一直在尝试在Rust中重新开发我的一个项目,以进行尝试,而我想做的一件事情就是插件系统。我还没有对dylib进行过多研究,但是现在我想使体系结构正确,以便以后添加dylib不会太难。
我的问题是关于插件配置的,我想为每个插件调用一个init函数,并允许它们返回一个对象,该对象随后将传递给其函数的每次调用。我真的不在乎那个对象是什么。这就是插件的业务。
我尝试使用Box<dyn>
,但没有特质当然是行不通的。这是否意味着唯一的方法就是声明一个空特征,例如PluginConfig
,并使用dyn?然后,插件可以仅实现该特征并从其init返回。还是我错过了完整的正确方法?如果我正确地理解了这本书,那么这样做将使以后的插件无法访问其字段,因为在Trait中未定义它们,因此无法正常工作。
tl; dr我只是在寻找与存储void *
等效的锈蚀。
答案 0 :(得分:5)
Rust方法是Box<dyn Any>
,然后插件可以安全地将其强制转换为其自己的类型。
但是您应该意识到Rust没有稳定的ABI,因此,如果您的插件界面中存在不仅仅与C兼容的内容,则您的插件和主程序必须使用相同的编译器版本和选项进行编译为了安全地工作。