struct Item1 {
a: u32,
}
struct Item2 {
a: u32,
b: u32,
}
fn some_helper_function(item: Item1) {
// Basically `item` could be of type `Item1` or `Item2`.
// How I create generic function to take any one of them?
// Some implementation goes here.
}
我怎样才能创建一个通用的some_helper_function
其参数可以有多个派生数据类型的函数,例如Item2
or Item1
?
在你的例子中,之间没有关系Item1
and Item2
,并且 Rust 的泛型不像 C++ 模板或 Python 函数那样是鸭子类型的。
如果您希望一个函数适用于多种类型,通常的方法是使其通用,并具有一些定义这些类型的共同点的特征:
trait HasA {
fn get_a(&self) -> u8;
}
impl HasA for Item1 {
fn get_a(&self) -> u8 {
self.a
}
}
impl HasA for Item2 {
fn get_a(&self) -> u8 {
self.a
}
}
fn some_helper_function<T: HasA>(item: T) {
println!("The value of `item.a` is {}", item.get_a());
}
已经有一份提案 https://internals.rust-lang.org/t/fields-in-traits/6933有特征字段,这可以让你使用item.a
来自泛型(您仍然需要为每种类型实现该特征)。但它已被推迟。看来这个提案收获太少,而且有些问题没有解决,没有被视为优先事项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)