小编Max*_*Max的帖子

类型构造函数实现Fn吗?

我不确定问题的标题是否正确,因为我不确定确切的位置。假设我有一个看起来像这样的代码:


struct MyWrapper(u64);

fn my_func<F>(f: F, n: u64) -> MyWrapper
where
    F: Fn(u64) -> MyWrapper,
{
    f(n)
}

fn main() {
    my_func(MyWrapper, 3);
}

Run Code Online (Sandbox Code Playgroud)

它可以编译和工作,因此看起来像是MyWrapper实现了特质Fn

但是,我应该尝试在特征中使用它吗?

struct MyWrapper(u64);

trait MyTrait
where
    Self: Fn(u64) -> MyWrapper,
{
}

impl MyTrait for MyWrapper{}

Run Code Online (Sandbox Code Playgroud)

我得到一个错误

16 | impl MyTrait for MyWrapper{};
   |      ^^^^^^^ expected an `Fn<(u64,)>` closure, found `MyWrapper`
   |
   = help: the trait `std::ops::Fn<(u64,)>` is not implemented for `MyWrapper`
Run Code Online (Sandbox Code Playgroud)

这是一个更具理论性的问题。

说实话,我想要实现的是实现这样的特质

编辑:我正确地指出我的示例不完整,因此有一个固定版本。

pub enum Status {
    New,
    Cancelled, …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
1
解决办法
172
查看次数

标签 统计

rust ×1