作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将几个函数存储在结构内的 HashMap 中。如果我使用实体类型,它会起作用:
extern crate bson;
extern crate serde;
use std::sync::Arc;
use std::collections::HashMap;
type CBack = Fn(Vec<bson::Array>) -> Vec<u8> + Send + Sync + 'static;
struct Struct {
cback_map: HashMap<String, Arc<CBack>>
}
fn main() {}
当我开始对闭包的参数和返回类型使用泛型时,编译器开始提示对象未调整大小等。相反,我希望我的 map 包含具有以下签名的闭包:
fn fun<'de, D, R>(_: D) -> R
where D: serde::Deserialize<'de>, R: serde::Serialize {}
如何正确定义该 map ?
最佳答案
如果您需要映射是异构的,即保存用不同类型实例化的函数的不同版本,那么您将需要更改其签名。
对于任何给定类型R
, 如果类型是 Sized
,那么这个函数就可以工作了。但是对于所有可能 R
s,编译器无法知道大小,因为每个都可能不同。
要让它工作,你需要使用像 Box<Serialize>
这样的特征对象。或 &Serialize
.
您还可能有其他问题。但是你的问题和代码示例不够完整,无法进行超出我上面所做的观察,与“对象未调整大小等”相关。
关于generics - 使用泛型作为集合中函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44784147/
我是一名优秀的程序员,十分优秀!