Rust 如何使用trait对象引用具有泛型方法的结构

Rust 如何使用trait对象引用具有泛型方法的结构,rust,Rust,关于这个问题,我了解到正确地将闭包传递给函数需要函数是泛型的,并采用实现Fn、FnMut或FnOnce特征的任何类型 从C++中实现库的一部分作为一种学习练习,我需要一些类型的抽象类。 use std::collections::HashMap; struct Event; trait IObject { fn makeFunc<F : FnMut(&Event)>(&mut self, s : &str, f : F); } struct Ob

关于这个问题,我了解到正确地将闭包传递给函数需要函数是泛型的,并采用实现Fn、FnMut或FnOnce特征的任何类型

从C++中实现库的一部分作为一种学习练习,我需要一些类型的抽象类。

use std::collections::HashMap;

struct Event;

trait IObject {
    fn makeFunc<F : FnMut(&Event)>(&mut self, s : &str, f : F);
}

struct Object1<'a> {
    m_funcs : HashMap<String, Box<FnMut(&Event) + 'a>>
}

impl <'a> Object1<'a> {
    fn new() -> Object1<'a> {
        Object1 {m_funcs : HashMap::new()}
    }
}

impl <'a> IObject for Object1<'a> {
    fn makeFunc<F : FnMut(&Event) + 'a>(&mut self, s: &str, f: F) {
        self.m_funcs.insert(String::from_str(s), Box::new(f));
    }
}

fn main() {
    let obj : &IObject = &Object1::new();
    println!("Hello, world!");
}
使用std::collections::HashMap;
结构事件;
特征对象{
fn makeFunc(&mut self,s:&str,f:f);
}
结构对象1>
}
恳求{
fn new()->Object1的Object1 IOObject(&mut self,s:&str,f:f){
self.m_funcs.insert(String::from_str(s),Box::new(f));
}
}
fn main(){
让obj:&IObject=&Object1::new();
println!(“你好,世界!”);
}

但是,返回的错误表示IOObject不能是trait对象,因为它包含具有泛型参数的方法。然而,要将闭包传递给函数,我需要泛型。有人能告诉我如何在仍然能够将闭包传递给函数的情况下实现我想要的抽象吗?

你无法回避这个问题;静态和动态调度不能混合使用。静态分派(泛型)所做的单态化不能与动态分派(trait对象)中使用的vtable一起工作

这两种方法中的一种必须使用:要么使用
ioobject
作为trait对象,要么使用泛型函数参数,以接受