gpt4 book ai didi

generics - 使用泛型作为集合中函数​​的参数

转载 作者:行者123 更新时间:2023-11-29 08:35:21 25 4
gpt4 key购买 nike

我正在尝试将几个函数存储在结构内的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com