type Foo struct {
header Header
}
type Header interface {}
type AudioHeader interface {
Header
Audio() error
}
type VideoHeader interface {
Header
Video() error
}
func bar() error {
...
// 假设有了一个 Header 类型的 header
ah := header.(AudioHeader)
ah.Audio()
vh := header.(VideoHeader)
vh.Video()
...
}
大体上的意思是, 我想用一个 header 去存储多种 Header trait, 我能想到最接近的是使用 enum.
enum Header {
AudioHeader,
VideoHeader,
}
trait Audio {}
trait Video {}
impl Audio for Header::AudioHeader {} // 报错, 因为 Header::AudioHeader 不是 type
Rust 的trait 确实也可以继承, 比如
trait A {}
trait B: A {}
trait C: A {}
但是我印象里没有能用 trait A 断言到 trait B 或 triat C 的说法.
特此请教一下, Rust 处理这种类型断言的情况有什么好的办法吗?
1
共 6 条评论, 1 页
评论区
写评论多谢多谢!
--
👇
fakeshadow: ``` // nightly #![feature(provide_any)] fn main() { use std::any::{request_ref, request_value, Demand, Provider};
}
// stable fn main() { use std::any::Any;
}
多谢多谢!
--
👇
songzhi: ```rust struct AudioHeader {} impl xx for AudioHeader {}
struct VideoHeader {} impl xx for VideoHeader {}
enum Header { Audio(AudioHeader), Video(VideoHeader), }
stable的直接,nightly的扩展能力强,自选一个就好
多谢多谢!
--
👇
ManonLoki: 虽然不太熟悉 但是记忆中有个 Any类型 可以用于断言
虽然不太熟悉 但是记忆中有个 Any类型 可以用于断言