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 处理这种类型断言的情况有什么好的办法吗?