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