gpt4 book ai didi

generics - 错误 : Expected Type Parameter, 发现关闭

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

我有以下 code :

struct Helper<F1: Fn()> {
f: F1,
}

struct User<F2: Fn()> {
h: Helper<F2>,
}

fn new_user<F3: Fn()>() -> User<F3> {
User {
// error: expected type parameter, found closure
h: Helper { f: || {} },
}
}

fn main(){}

所以 User需要 Helper<F1> F1 的类型由 User 指定,在本例中为 new_user 中的闭包.

此代码编译失败,错误为 expected type parameter, found closurenew_user .据我所知(例如参见 this link ),这是因为类型参数的边界 F3new_user由调用者指定(或签名可能?),因此尽管闭包实现了 Fn() trait,它将无法限制类型参数 F3 以匹配闭包的类型。相反,预计 new_user应该与任何给定的 F3 一起工作,它显然不会。

所以我的问题是:我该如何解决这个问题?有什么表达方式我想要new_user返回 UserF2设置为闭包的类型?

我尝试使用类型推断占位符:

// error: the type placeholder `_` is not allowed within types on item signatures
fn new_user() -> User<_> {
User {
h: Helper { f: || {} },
}
}

我可以使用 Box,但这需要修改 Helper ,这在我的实际案例中并不理想:

struct Helper {
f: Box<dyn Fn()>,
}

struct User {
h: Helper,
}

fn new_user() -> User {
User {
h: Helper { f: Box::new(|| {}) },
}
}

fn main(){}

我也在尝试替换 Fn()具有自定义特征,我可以为 User 实现特别是,但到目前为止它很笨重。

有什么建议吗?

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