小编Tob*_*P64的帖子

动态加载 crate 的一致 TypeId

我有一个插件系统,我在其中传递&dyn Any给动态加载的 Rust 函数,但向下转换引用失败,因为TypeIds 不同(对于同一类型),尽管我添加rustflags = ["-Cmetadata=12345678"]到了两个板条箱的货物配置中。而且,似乎只有外部板条箱中的类型受到影响(我尝试过(),它在两个板条箱中产生了相同的结果TypeId)。我目前正在转换原始指针 ( unsafe { &*(v as *const dyn Any as *const Type) }) 来解决此问题,但我更喜欢没有不安全代码的解决方案。

例如下面的代码:

println!("CRATE 1: TypeId of `()`: `{:?}`, TypeId of `toml::Value`: `{:?}`",
                 TypeId::of::<()>(), TypeId::of::<toml::Value>());
Run Code Online (Sandbox Code Playgroud)

产生这个输出:

CRATE 1: TypeId of `()`: `TypeId { t: 7549865886324542212 }`, TypeId of `toml::Value`: `TypeId { t: 9270396907601429078 }`
CRATE 2: TypeId of `()`: `TypeId { t: 7549865886324542212 }`, TypeId of `toml::Value`: `TypeId { t: 5704635987193303200 …
Run Code Online (Sandbox Code Playgroud)

shared-libraries rust rust-crates

5
推荐指数
1
解决办法
497
查看次数

标签 统计

rust ×1

rust-crates ×1

shared-libraries ×1