我不确定问题的标题是否正确,因为我不确定确切的位置。假设我有一个看起来像这样的代码:
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 ×1