我正在处理以下代码:
use std::cell::RefCell;
struct CallbackWithArgs<T> {
callback: Box<Fn(&mut T) -> ()>,
arg: RefCell<T>,
}
struct S {
args: CallbackWithArgs<_>,
}
编译器有错误:
error[E0121]: the type placeholder `_` is not allowed within types on item signatures
--> src/main.rs:9:28
|
9 | args: CallbackWithArgs<_>,
| ^ not allowed in type signatures
这样做的正确方法是什么?
答案 0 :(得分:3)
您不能在结构声明中使用_
;编译器需要在编译时知道结构的大小。
如果您希望类型是通用的,您可以像S
一样向CallbackWithArgs
添加类型参数:
struct CallbackWithArgs<T> {
callback: Box<Fn(&mut T) -> ()>,
arg: RefCell<T>,
}
struct S<T> {
args: CallbackWithArgs<T>,
}
有关_
的说明,请参阅What is Vec<_>?