特征是否可以有一个可选的通用类型?

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 {
    // ...
}