定义泛型类型的方法需要在impl
后添加泛型类型:
struct GenericVal<T>(T,);
impl <T> GenericVal<T> {}
我认为移除
<T>
是可以的:struct GenericVal<T>(T,);
impl GenericVal<T> {}
有没有特别的考虑?
定义泛型类型的方法需要在impl
后添加泛型类型:
struct GenericVal<T>(T,);
impl <T> GenericVal<T> {}
<T>
是可以的:struct GenericVal<T>(T,);
impl GenericVal<T> {}
Rust允许你编写仅适用于某些特定类型参数组合的impl
块。例如:
struct GenericVal<T>(T);
impl GenericVal<u32> {
fn foo(&self) {
// method foo() is only defined when T = u32
}
}
GenericVal
是泛型的,但是impl
本身不是泛型的。GenericVal<T>
类型的impl
块,您必须首先在impl
本身上声明一个类型参数(否则,T
将尝试查找名为T
的类型)。struct GenericVal<T>(T);
impl<T> GenericVal<T> {
fn foo(&self) {
// method foo() is always present
}
}
这个声明还允许您拥有一个可以多次使用的单个类型参数,强制类型相同。
struct GenericVal<T, U>(T, U);
impl<V> GenericVal<V, V> {
fn foo(&self) {
// method foo() is only defined when T = U
}
}
GenericVal
的类型参数中推断出而不是 impl
。你能解释一下为什么 impl<V>
语法是必须的吗? - yeshengmV
的类型,那怎么办?impl
中使用的 V
是指具体类型 V
(例如我的答案中的第一个示例)还是隐式泛型参数 V
? - Francis Gagné