我给个最小的实现 demo
use std::collections::HashMap;
use lazy_static::lazy_static;
lazy_static! {
pub static ref CACHE: HashMap<&'static str, &'static dyn MyTrait> = {
let map = HashMap::new();
map.insert("action1", &MyTraitImpl1 {});
map.insert("action2", &MyTraitImpl2 {});
map.insert("action3", &MyTraitImpl3 {});
map
};
}
pub trait MyTrait {
/// .
///
/// # Examples
///
/// ```
/// // Example template not implemented for trait functions
/// ```
fn action();
}
pub struct MyTraitImpl1;
impl MyTrait for MyTraitImpl1 {
fn action() {
println!("action1");
}
}
pub struct MyTraitImpl2;
impl MyTrait for MyTraitImpl2 {
fn action() {
println!("action2");
}
}
pub struct MyTraitImpl3;
impl MyTrait for MyTraitImpl3 {
fn action() {
println!("action3");
}
}
fn main() {
println!("Hello, world!");
}
我的想法是使用一个静态的全局 HashMap 作为只读缓存,这个 HashMap 里存的是 trait object,但是编译过不了,求助各位大大,这种设计 Rust 应该怎么写?能不能必须要使用 unsafe
,或者必须要用 unsafe
的话,又要怎么写?
感谢
1
共 3 条评论, 1 页
评论区
写评论万分感谢。。。。。。。。太菜了。。。
--
👇
gwy15: 多看看编译器的错误提示,提示得很清楚了
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=d0b4b0ef98c91c7388b9d4622856df31
多看看编译器的错误提示,提示得很清楚了
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=d0b4b0ef98c91c7388b9d4622856df31
笔误:能不能必须要使用 unsafe 应该是 能不能不使用 unsafe