gpt4 book ai didi

rust - 你能为多种类型实现一个通用结构吗?

转载 作者:行者123 更新时间:2023-11-29 08:14:51 24 4
gpt4 key购买 nike

我有一个通用结构 Dit<T>实现 T 的 FFT:

struct Dit<T> {
n: usize,
exponents: Bin<f32, Complex<T>>,
tmp: Option<Vec<Complex<T>>>,
}

impl Dit<f32> {
/// Create a new instance
///
/// Notice that the number of samples that will be processed by an instance
/// is always fixed, because the exponent values are precalculated.
///
/// # Parameters
/// - `n` The number of samples this operator can process, eg. 1024
pub fn new(n: usize) -> Result<Dit<f32>, FFTError> {
if 2.pow((n as f64).log2() as usize) != n {
return Err(FFTError::InvalidLength);
}

let rtn = Dit {
n: n,
exponents: Bin::new(),
tmp: None,
}.pregen();

return Ok(rtn);
}

// ...
}

我开始为 f64 添加实现:

impl Dit<f64> {
pub fn new(n: usize) -> Result<Dit<f64>, FFTError> {
unimplemented!()
}
// ...
}

...我遇到了这些错误:

src/impls/dit.rs:186:7: 196:4 error: duplicate definition of value `new`
src/impls/dit.rs:186 pub fn new(n:usize) -> Result<Dit<f64>, FFTError> {
src/impls/dit.rs:187 if 2.pow((n as f64).log2() as usize) != n {
src/impls/dit.rs:188 return Err(FFTError::InvalidLength);
src/impls/dit.rs:189 }
src/impls/dit.rs:190 let rtn = Dit {
src/impls/dit.rs:191 n: n,
...
src/impls/dit.rs:110:7: 120:4 note: first definition of value `new` here
src/impls/dit.rs:110 pub fn new(n:usize) -> Result<Dit<f32>, FFTError> {
src/impls/dit.rs:111 if 2.pow((n as f64).log2() as usize) != n {
src/impls/dit.rs:112 return Err(FFTError::InvalidLength);
src/impls/dit.rs:113 }
src/impls/dit.rs:114 let rtn = Dit {
src/impls/dit.rs:115 n: n,

我很困惑。我的印象是,对于通用 Foo<T> , 实现 Foo<Bar1>是与 Foo<Bar2> 的实现不同的具体实例.因此,我的印象是我可以为每个具体实例提供不同的方法实例。

我做错了什么?

最佳答案

我不认为用这样的语法可以解决你的任务(至少,我在 Rust 引用书中找不到任何例子)。

但也有一些工作结构,例如:

impl<T> Dit<T> where T: Float {

或者:

trait DitTrait {
fn new(n: usize) -> Result<Self, FFTError>;
}

impl DitTrait for Dit<f32> { ... }
impl DitTrait for Dit<f64> { ... }

关于rust - 你能为多种类型实现一个通用结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28291349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com