Generics 是否可以为特征设置可选的泛型类型?

Generics 是否可以为特征设置可选的泛型类型?,generics,rust,optional,traits,Generics,Rust,Optional,Traits,我需要一个特性的可选泛型类型,我正试图找出如何以一种好的方式实现它。下面是一个我需要它作为状态结构的示例: impl<T> MyTrait<T> for MyStruct { type Value = MyState<T>; fn some_function(&self, state: &Self::Value) { ... } ... } 泛型类型仅用于定义MyState结构中的字段类型。M

我需要一个特性的可选泛型类型,我正试图找出如何以一种好的方式实现它。下面是一个我需要它作为状态结构的示例:

impl<T> MyTrait<T> for MyStruct {
    type Value = MyState<T>;

    fn some_function(&self, state: &Self::Value) {
        ...
    }
    ...
}
泛型类型仅用于定义MyState结构中的字段类型。MyState结构本身总是以完全不同的方式定义,这取决于用例,并不需要在所有情况下都使用泛型类型

我知道对于具有可选泛型类型的结构存在幻影数据,我想知道对于traits是否也有类似的东西。不幸的是,我还没有找到任何东西

我可以用幻影数据添加另一种类型吗?像这样:

impl<T> MyTrait<T> for MyStruct {
    type Value = MyState;
    type Phantom = PhantomData<T>;

    fn some_function(&self, state: &Self::Value) {
        ...
    }
    ...
}
impl MyTrait for MyStruct{
类型值=MyState;
类型Phantom=PhantomData;
fn某些函数(&self,state:&self::Value){
...
}
...
}
Rust可能会抱怨未使用的类型


最后,我将把它添加到一个巨大的代码库中,在这个代码库中,Trait结构已经被给出并在许多地方使用。我希望我不需要接触太多已经存在的代码。

如果您不需要为每种
t
实现
MyTrait
,您可以选择一个虚拟类型来为
MyStruct
参数化它:

impl MyTrait<()> for MyStruct {
    // ...
}
impl MyTrait for MyStruct{
// ...
}

在此上下文中如何使用
T
?状态结构包含一个HashMap。状态用于图形分析,其中每个节点都有一个状态。T用于在地图中存储不同类型的信息。在某些情况下,状态结构没有此映射,因为图形分析完全不同。是否适合将PhantomData添加到所有现有状态实现中?这样,T就不需要是可选的。在我看来,这似乎是一个肮脏的权宜之计。请将这些信息纳入问题中。如果做成一个合适的,就更好了。在为
MyStruct
实现它时,是否需要为每个
T
实现
MyTrait
?如果没有,您可以
为MyStruct{…}
…导入MyTrait,在常见的情况下,您可以在trait定义中将其作为默认值。@eggyal是一个很好的一般性建议,但可能不适用于OP的情况,因为“trait结构已经在许多地方给出并使用了”。但这不是一个突破性的改变吗?@eggyal对我说“已经给出”听起来好像OP无法修改代码的这一部分,但这可能只是我的解释。啊,你可能是对的。
impl MyTrait<()> for MyStruct {
    // ...
}