struct Disk<T: Read + Seek + Write> {
handle: T,
}
struct Partition<T: Read + Seek + Write> {
disk: Disk<T>,
}
struct File<T: Read + Seek + Write> {
partition: Partition<T>,
}
struct Partition
の時点では、もはや何がDisk
の特性境界であるか興味深いものではない。言語設計によって、を持たないハンドルを持つを作成することはできません。この例は非常に単純ですが、型が複数のメンバーを持つ場合、型が非常に複雑になる可能性があります。私が欲しいものネストされたRustタイプでジェネリックスを抽象化するにはどうすればよいですか?
は次のとおりです。
struct Disk<T: Read + Seek + Write> {
handle: T,
}
type ExDisk = FIXME;
struct Partition {
disk: ExDisk,
}
struct File {
partition: Partition,
}
私はこれがどのように質問に答えるかはわかりません(ただし、OPがそれを受け入れたようにはっきりしていますが)。 OPは 'struct Partition {'と言うことができるようにしたいと思っていましたが、この答えにはまだ 'Partition'と' File'のジェネリックパラメータがあります。 – Shepmaster
@Shepmaster:私は複雑さを減らす(そして内側のメンバーの境界を抽象化する)という質問を読んだが、必ずしもすべての境界を取り除くわけではない。 'Volume'がオブジェクトセーフであれば、' Partition'に 'Box'を含めることが可能であり、それはパラメータなしであることに注意してください。 –
これは複雑さを軽減するので、私はこれを受け入れました。箱 'Box'の特性オブジェクトを使用すると、質問にもっと正確に答えることができます。 –
eddy