Avatar ·

如何为外部crate中的类型实现trait,如果既不能修改trait也不能修改类型?

大家好!我是Rust新手,遇到了一个几个小时都无法解决的问题。 我有一个外部crate `external_crate`,它定义了trait `Transformer` 和结构体 `Data`。我无法修改这个crate的代码。大致如下: ```rust // external_crate pub trait Transformer { fn transform(&self) -> String; } pub struct Data { pub value: i32, } ``` 我想为 `Data` 实现 `Transformer`,以便在我的项目中使用。我写了: ```rust use external_crate::{Data, Transformer}; impl Transformer for Data { fn transform(&self) -> String { format!("Value: {}", self.value) } } ``` 但编译器报错: ``` error[E0117]: only traits defined in the current crate can be implemented for arbitrary types ``` 我知道这与orphan rule有关,但不知道如何正确绕过这个限制。我该怎么办?是否需要创建一个wrapper?还是有其他方法?