如何在 Rust 中设计具有可移动状态完整侦听器的事件系统?

问题描述 投票:0回答:0

我正在用 Rust 实现一个事件系统,它必须:

  1. 支持全状态事件监听器
  2. 允许删除听众

Event1
的监听器存储在全局向量中:

static mut EVENT1_LISTENERS: Vec<Box<dyn FnMut()>> = Vec::new();

Box<dyn FnMut()>
在这里支持可变状态的听众,就像这个:

let mut counter = 0;
unsafe {
  EVENT1_LISTENERS.push(move || {
    counter += 1;
    println!("event1 has happend {} times", counter);
  });
}

你会如何删除这个设计的监听器? 如果不可能,那么我该如何更改设计以支持删除听众?

我试过像这样使用

retain

unsafe {
  EVENT1_LISTENERS
    .retain(|f| f.as_ref() as *const _ != &remove_f as &dyn FnMut() as *const _);
}

其中

remove_f
是我要删除的功能

function events rust listener removeeventlistener
© www.soinside.com 2019 - 2024. All rights reserved.