将任何类型存储在struct字段中

时间:2018-01-15 07:26:35

标签: rust

我正在处理以下代码:

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

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

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

如果您希望类型是通用的,您可以像S一样向CallbackWithArgs添加类型参数:

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

struct S<T> {
    args: CallbackWithArgs<T>,
}

Playground Link

有关_的说明,请参阅What is Vec<_>?