请教大佬们一个问题,代码如下:
trait MyTrait{}
struct S<T: MyTrait>{
    optional: Option<T>,
    main: String
}
impl<T> From<&str> for S<T> where T: MyTrait{
    fn from(main: &str) -> Self{
        S{
            optional: None,
            main: main.to_string()
        }
    }
}
fn main(){
    // 下面的S参数需要写泛型参数,请问这个泛型参数该怎么写?
    // 或者说有没有办法声明某个泛型参数在某些impl里是非必须的,还是有其它更好的方式来处理这类问题呢?
    let s: S<?> = "".into(); 
}
	    
	    
		1
	    
	    
	    共 5 条评论, 1 页
	
	
    
评论区
写评论招 Rust 工程师: https://rustcc.cn/article?id=4a85e4c0-34fd-457c-9ce6-58e8bf687058
虽然你在这里给
optional放了个None,看起来T是个啥对它都没有影响,但实际上不是这样的。S<u8>和S<u64>的optional的大小是不一样的,从而相应的S<T>的大小也不一样,所以编译器才提示你必须写明类型。--
👇
fefit: 感谢回复,大概能理解这个意思了。看来泛型的机制使得最后必须对应到具体类型,如果值有某种方式,可以标识不同的泛型实际类型、对实际的数据没有实质影响,进而可以在某些情况下可以忽略泛型参数就好了。看来不是这么简单好处理的,只能另想方式了~再次感谢!
--
👇
chirsz-ever: 必须要写,或者可通过其他方式推导,因为不同的
None也是不一样的。那你就写一个空实现呀
--
👇
fefit: 感谢回复,大概能理解这个意思了。看来泛型的机制使得最后必须对应到具体类型,如果值有某种方式,可以标识不同的泛型实际类型、对实际的数据没有实质影响,进而可以在某些情况下可以忽略泛型参数就好了。看来不是这么简单好处理的,只能另想方式了~再次感谢!
--
👇
chirsz-ever: 必须要写,或者可通过其他方式推导,因为不同的
None也是不一样的。感谢回复,大概能理解这个意思了。看来泛型的机制使得最后必须对应到具体类型,如果值有某种方式,可以标识不同的泛型实际类型、对实际的数据没有实质影响,进而可以在某些情况下可以忽略泛型参数就好了。看来不是这么简单好处理的,只能另想方式了~再次感谢!
--
👇
chirsz-ever: 必须要写,或者可通过其他方式推导,因为不同的
None也是不一样的。必须要写,或者可通过其他方式推导,因为不同的
None也是不一样的。