【发布时间】:2021-10-02 22:20:57
【问题描述】:
我正在研究多项式的实现,它在整数系数的情况下使用 C 库。但是,当系数来自其他环时,我想定义一个不同的实现。当我们将使用 C 库时,我们需要处理一些我们传递给 C 的底层值,这些值分组在一个结构中。否则,不需要定义这些值。我该如何实施?这是我想要的模型:
pub struct Poly<T> {
coeff_type: T,
c_value: StructDependingOnT, // only needs to be defined when T is an integer for example
}
我的想法是有一个特征来指定系数类型何时意味着我们将使用 C 库:
pub struct Poly<T> {
coeff_type: T,
}
pub trait UsesC<T> { // T is the underlying c_value needed above
fn get_c_value(&self) -> T;
}
impl UsesC<StructDependingOnT> for Poly<CoefficientType> {
fn get_c_value(&self) -> StructDependingOnT {
// ??
}
}
这里的问题是 c_value 不是结构的字段。有没有办法只在某些时候定义一个字段,比如当它实现某个特征时?为 UsesC 定义一个关联的常量与我想要的很接近,但它需要是可变的。
【问题讨论】: