小编Mar*_*tti的帖子

如何存储引用而不必处理生命周期?

由于所建议dynamic_reload板条箱的例子,我收集Symbols,而不是每次都提取它们,但Symbol需要一辈子.使用生命周期更改方法签名并破坏与方法的兼容性DynamicReload::update.

用它std::mem::transmute来改变Symbol生命周期是一种有效的解决方法'static吗?

extern crate dynamic_reload;

use dynamic_reload::{DynamicReload, Lib, Symbol, Search, PlatformName, UpdateState};
use std::sync::Arc;
use std::time::Duration;
use std::thread;
use std::mem::transmute;

struct Plugins {
    plugins: Vec<(Arc<Lib>, Arc<Symbol<'static, extern "C" fn() -> i32>>)>,
}

impl Plugins {
    fn add_plugin(&mut self, plugin: &Arc<Lib>) {
        match unsafe { plugin.lib.get(b"shared_fun\0") } {
            Ok(temp) => {
                let f: Symbol<extern "C" fn() -> i32> = temp;
                self.plugins.push((plugin.clone(), Arc::new(unsafe { transmute(f) }))); …
Run Code Online (Sandbox Code Playgroud)

symbols ffi lifetime rust

3
推荐指数
1
解决办法
267
查看次数

标签 统计

ffi ×1

lifetime ×1

rust ×1

symbols ×1