以下代码不起作用,因为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);
}
Run Code Online (Sandbox Code Playgroud)
我当然可以自己实现它:
impl Clone for FStruct{
fn clone(&self) -> Self{
unsafe{
let mut t: FStruct = std::mem::uninitialized();
std::ptr::copy_nonoverlapping(self, &mut t, 1); …Run Code Online (Sandbox Code Playgroud) rust ×1