【发布时间】:2016-01-07 10:47:38
【问题描述】:
以下代码不起作用,因为 Clone 特征未针对 fn(&u16) 类型实现:
#[derive(Clone)]
struct FStruct(fn(&u16));
fn fn1(x:&u16){
println!("fn1 called! {:?}", x);
}
fn fn2(x:&u16){
println!("fn2 called! {:?}", x);
}
fn main() {
let d1 = 32u16;
let d2 = 42u16;
let x1 = FStruct(fn1);
let mut x2 = FStruct(fn2);
x1.0(&d1); x2.0(&d2);
x2 = x1.clone();//error: the trait `core::clone::Clone` is not implemented for the type `fn(&u16)`
x1.0(&d1); x2.0(&d2);
}
我当然可以自己实现:
impl Clone for FStruct{
fn clone(&self) -> Self{
unsafe{
let mut t: FStruct = std::mem::uninitialized();
std::ptr::copy_nonoverlapping(self, &mut t, 1);
t
}
}
}
但这有点烦人。 Rust 只允许为用户类型实现 Clone,所以我需要一个围绕 fn(&T) 的结构或枚举。
这个实现真的可以安全使用吗?为什么Clone默认不为fn(&T)实现?
【问题讨论】:
标签: rust