特征是否可以有一个可选的通用类型?
Is it possible to have an optional generic type for a trait?
我需要一个特征的可选泛型类型,我正在尝试弄清楚如何以一种很好的方式实现它。这是一个我需要它用于状态结构的示例:
impl<T> MyTrait<T> for MyStruct {
type Value = MyState<T>;
fn some_function(&self, state: &Self::Value) {
...
}
...
}
这是另一个我根本不需要它的例子:
impl MyTrait for MyStruct {
type Value = MyState;
fn some_function(&self, state: &Self::Value) {
...
}
...
}
泛型仅用于定义MyState结构中的字段类型。 MyState 结构本身总是根据用例以完全不同的方式定义,并且在所有情况下都不需要泛型。
我知道 PhantomData 存在用于具有可选泛型类型的结构,我想知道是否有类似的特征。不幸的是,我还没有找到任何东西。
我可以使用 PhantomData 添加另一种类型吗?像这样:
impl<T> MyTrait<T> for MyStruct {
type Value = MyState;
type Phantom = PhantomData<T>;
fn some_function(&self, state: &Self::Value) {
...
}
...
}
Rust 可能会抱怨未使用的类型。
最后,我将其添加到一个巨大的代码库中,其中已经在许多地方给出并使用了 Trait 结构。我希望我不需要触及太多已经存在的代码。
如果您不需要为 每种 种 T
实现 MyTrait<T>
,您可以选择一个虚拟类型来为 [=13] 参数化它=]:
impl MyTrait<()> for MyStruct {
// ...
}
我需要一个特征的可选泛型类型,我正在尝试弄清楚如何以一种很好的方式实现它。这是一个我需要它用于状态结构的示例:
impl<T> MyTrait<T> for MyStruct {
type Value = MyState<T>;
fn some_function(&self, state: &Self::Value) {
...
}
...
}
这是另一个我根本不需要它的例子:
impl MyTrait for MyStruct {
type Value = MyState;
fn some_function(&self, state: &Self::Value) {
...
}
...
}
泛型仅用于定义MyState结构中的字段类型。 MyState 结构本身总是根据用例以完全不同的方式定义,并且在所有情况下都不需要泛型。
我知道 PhantomData
我可以使用 PhantomData
impl<T> MyTrait<T> for MyStruct {
type Value = MyState;
type Phantom = PhantomData<T>;
fn some_function(&self, state: &Self::Value) {
...
}
...
}
Rust 可能会抱怨未使用的类型。
最后,我将其添加到一个巨大的代码库中,其中已经在许多地方给出并使用了 Trait 结构。我希望我不需要触及太多已经存在的代码。
如果您不需要为 每种 种 T
实现 MyTrait<T>
,您可以选择一个虚拟类型来为 [=13] 参数化它=]:
impl MyTrait<()> for MyStruct {
// ...
}