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``。因此,在我正确设置了生存期之后,这个错误已经被修复。我想问题已经解决了。然而,对于泛型类型声明中生命周期和特征声明的组合,我仍然有点困惑。对泛型有一个很好的理解。是的,我知道我不能在那个地方使用。
。我只想表达一下任何的想法。无论如何,谢谢你。