我的问题是我想要一个透明的包装器并Into<underlying>为其实现。不幸的是,Rust 的孤儿规则禁止这样做。这是一个简单的例子:
#[repr(transparent)]
pub struct MyWrapper<T>(pub T);
impl<T> Into<T> for MyWrapper<T> {
fn into(self) -> T {
self.0
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我有什么办法可以实现它吗?我正在使用宏为我当前使用的所有类型生成 impl,但它看起来非常尴尬和肮脏。
您可以改为实现 Deref 特征。Deref 文档包含以下示例,该示例与您的代码几乎相同:
use std::ops::Deref;
struct DerefExample<T> {
value: T
}
impl<T> Deref for DerefExample<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
&self.value
}
}
fn main() {
let x = DerefExample { value: 'a' };
assert_eq!('a', *x);
}
Run Code Online (Sandbox Code Playgroud)