Rust 在结构字段中存储任何类型

Rust 在结构字段中存储任何类型,rust,Rust,我正在编写如下代码: use std::cell::RefCell; struct CallbackWithArgs<T> { callback: Box<Fn(&mut T) -> ()>, arg: RefCell<T>, } struct S { args: CallbackWithArgs<_>, } 使用std::cell::RefCell; 结构CallbackWithArgs{ 回调:Box

我正在编写如下代码:

use std::cell::RefCell;

struct CallbackWithArgs<T> {
    callback: Box<Fn(&mut T) -> ()>,
    arg: RefCell<T>,
}

struct S {
    args: CallbackWithArgs<_>,
}
使用std::cell::RefCell;
结构CallbackWithArgs{
回调:Box()>,
arg:RefCell,
}
结构{
args:CallbackWithArgs,
}
编译器有一个错误:

error[E0121]:在项目签名的类型中不允许使用类型占位符“%u121”
-->src/main.rs:9:28
|
9 | args:CallbackWithArgs,
|类型签名中不允许^

正确的方法是什么?

您不能在结构声明中使用
\uuu
;编译器需要在编译时知道结构的大小

如果希望类型是泛型的,可以向
S
添加类型参数,就像对
CallbackWithArgs
所做的那样:

struct CallbackWithArgs<T> {
    callback: Box<Fn(&mut T) -> ()>,
    arg: RefCell<T>,
}

struct S<T> {
    args: CallbackWithArgs<T>,
}
struct CallbackWithArgs{
回调:Box()>,
arg:RefCell,
}
结构{
args:CallbackWithArgs,
}


有关
\u
的解释,请参见

同时添加编译器错误。“有人能告诉我正确的方法吗?”这是什么?您想做什么?为什么不让
S
泛型以允许任何类型?编译器错误类似于
expect
std::any::any+'static
,find
std::any::any``。因此,在我正确设置了生存期之后,这个错误已经被修复。我想问题已经解决了。然而,对于泛型类型声明中生命周期和特征声明的组合,我仍然有点困惑。对泛型有一个很好的理解。是的,我知道我不能在那个地方使用
。我只想表达一下
任何
的想法。无论如何,谢谢你。