如何处理未知类型

问题描述 投票:-1回答:1

我一直在努力重新开发我的Rust项目来试用它,我想做的一件事就是一个插件系统。我还没有看过dylib,但是现在我想让架构正确,以便以后添加dylib不会太难。

我的问题是关于插件配置,我想为每个插件调用一个init函数,并允许它们返回一个对象,然后将其传递给它们的每个函数调用。我真的不关心那个对象是什么;这是插件的业务。

我尝试使用Box<dyn>但当然没有特性它不起作用。这是否意味着唯一的方法是声明一个空特征,例如PluginConfig,并使用dyn?然后插件可以实现该特征并从其init返回。或者我错过了完全做到的正确方法?如果我正确地理解了这本书,那么这样做就会使插件以后无法访问它们的字段,因为它们没有在Trait中定义,因此无法正常工作。

tl; dr我只是在找相当于储存void *的铁锈。

rust
1个回答
5
投票

Rust的方法是Box<dyn Any>,然后插件可以安全地回放到它自己的类型。

但是你应该知道Rust没有稳定的ABI,所以如果你的插件界面中有任何不仅仅是C兼容的东西,你的插件和你的主程序必须使用相同的编译器版本和选项进行编译,以便安全地工作。

© www.soinside.com 2019 - 2024. All rights reserved.