ide*_*n42 7 generics types rust
f64
我正在用 Rust 编写一些代码,这些代码可以与和一起工作f32
。
尝试将其转换为使用通用函数是相当复杂的;我需要在每次使用时声明该类型的功能。
在实践中,我只想f32
被f64
利用。有没有一种方法可以编写仅适用于一组已知类型的泛型函数?
我意识到这有点违背通用功能。
为此想到的唯一工具是 a trait
,因此您的函数将是:
pub fn f<T: MyTrait>(x: T) {...}
Run Code Online (Sandbox Code Playgroud)
然后您可以实现MyTrait
forf32
和f64
。这很接近,但有一个漏洞:调用者可以在自己的类型上实现该特征。你无法通过设为MyTrait
私有来解决这个问题,因为 Rust 会抱怨你MyTrait
在公共接口中使用了私有类型 ( )。
很接近,但我认为这不太可能!
尽管我同意关于使用现有相关特征的其他答案,但您会这样做:
mod foo {
pub trait MyTrait {}
impl MyTrait for f32 {}
impl MyTrait for f64 {}
pub fn f<T: MyTrait>(x: T) {}
}
pub fn main() {
foo::f(3f32);
foo::f(3f64);
// foo::f(3u64); // doesn't work as u64 doesn't implement MyTrait
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1175 次 |
最近记录: |