如何为外部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?还是有其他方法?