小编aSp*_*pex的帖子

为什么`fn(&T)`的'Clone`特性没有实现?

以下代码不起作用,因为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

3
推荐指数
1
解决办法
230
查看次数

标签 统计

rust ×1