当在Rust中使用仿制药时,“;编译时无法知道'str'类型值的大小";

当在Rust中使用仿制药时,“;编译时无法知道'str'类型值的大小";,rust,Rust,以下代码将起作用并打印Foo(“hello”): #[派生(调试)] 结构Foo for Foo Self{ 富(s) } } fn main(){ 让我们:&str=“hello”; 设foo=foo::from(s); println!(“{:?}”,foo); } 但是,如果我使用泛型,并将所有str更改为T,它将不起作用: #[派生(调试)] 结构Foo for Foo Self{ 富(s) } } fn main(){ 让我们:&str=“hello”; 设foo=foo::from

以下代码将起作用并打印
Foo(“hello”)

#[派生(调试)]
结构Foo for Foo Self{
富(s)
}
}
fn main(){
让我们:&str=“hello”;
设foo=foo::from(s);
println!(“{:?}”,foo);
}
但是,如果我使用泛型,并将所有
str
更改为
T
,它将不起作用:

#[派生(调试)]
结构Foo for Foo Self{
富(s)
}
}
fn main(){
让我们:&str=“hello”;
设foo=foo::from(s);
println!(“{:?}”,foo);
}
error[E0277]:编译时无法知道'str'类型的值的大小
-->答:12:25
|

2 | struct Foo类型参数在rust中隐式地
大小
。您应该明确地添加
?大小
约束

#[derive(Debug)]
struct Foo<'a, T: ?Sized>(&'a T);

impl<'a, T: ?Sized> From<&'a T> for Foo<'a, T> {
    fn from(s: &'a T) -> Self {
        Foo(s)
    }
}
#[派生(调试)]
结构Foo for Foo Self{
富(s)
}
}
#[derive(Debug)]
struct Foo<'a, T: ?Sized>(&'a T);

impl<'a, T: ?Sized> From<&'a T> for Foo<'a, T> {
    fn from(s: &'a T) -> Self {
        Foo(s)
    }
}