我正在开发一个Rust crate,它使用几个可用的库来打开网络接口。该项目包括:
Library
和实施LibraryA
,LibraryB
,LibraryC
。Interface
及其实施InterfaceA
,InterfaceB
,
InterfaceC
。所有接口都引用了它们的库。trait Interface<'a> {
fn do_something();
}
trait Library {
type LI: for<'a> Interface<'a>;
fn open_interface(&self) -> Self::LI;
}
struct LibraryA {
abc: i32,
}
struct InterfaceA<'a> {
abc: &'a i32,
}
impl Library for LibraryA {
type LI = InterfaceA<'a>;
fn open_interface(&self) -> Self::LI {
unimplemented!()
}
}
impl<'a> Interface<'a> for InterfaceA<'a> {
fn do_something() {
unimplemented!()
}
}
这不能编译,因为我不知道如何定义关联类型LI
:
error[E0261]: use of undeclared lifetime name `'a`
--> src/main.rs:19:26
|
19 | type LI = InterfaceA<'a>;
| ^^ undeclared lifetime
这里很棘手 - LibraryA
没有任何实际生命周期(没有引用外部对象),我找不到任何方法来定义LI
类型被定义的生命周期。< / p>