gpt4 book ai didi

rust - 为本地泛型类型实现外来特征

转载 作者:行者123 更新时间:2023-11-29 08:00:45 27 4
gpt4 key购买 nike

我正在尝试使用静态分派(dispatch)为来自 crate B 的特征实现来自 crate A 的特征。我正在包装外来特征,但遇到了 impl<T> 的问题行:

extern crate a;
extern crate b;

pub trait C: a::A {}

impl<T: C> b::B for T {}

我正在寻找的最终结果是实现 b::B对于特征的实现者 C ,使用静态调度。

我收到以下错误:

error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
--> c/src/lib.rs:3:1
|
3 | impl<T: C> b::B for T {}
| ^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
|
= note: only traits defined in the current crate can be implemented for a type parameter

我可以通过使用动态调度来解决这个问题 — impl b::B for dyn C — 但想通过静态分派(dispatch)来完成此任务。

我已经试过了:

最佳答案

我通常做的是将外部类型包装在 struct 中(而不是引入从外部派生的新 trait):

extern crate a;
extern crate b;

pub struct C<T: a::A> {
pub t: T,
}

impl<T: a::A> b::B for C<T> {}

然而,这有时需要一些样板来在 C 和“普通”类型之间进行转换。

这有时称为“NewType 模式”(如 https://github.com/Ixrec/rust-orphan-rules 中所示)。

关于rust - 为本地泛型类型实现外来特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58417250/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com