Any
は、具体的な型ではなく、一般的な型パラメータを構造体に追加する必要があります。
struct BertDirectory<T: Any> {
data: Vec<T>
}
またT
もDebug
とPartialEq
を実装して何かであることを確認したい場合があります。これはコンパイルする必要はありませんが、BertDirectory
がこれらの特性を常に実装していることを確認したい場合に使用します。それ以外の場合は、の場合にのみDebug
が実装されます。
struct BertDirectory<T: Any + Debug + PartialEq> {
data: Vec<T>
}
はしても、私はこれがdata
はまだシングルタイプを保持するために制約されますので、あなたが本当に欲しいもの、あなたを与えることを知っていないそれらのものの両方を与えられました。 T
は、構造体のインスタンスごとに単一の型しか表現できません。
あなたは、異なるタイプの値を格納するdata
が必要な場合は、代わりのvtableを使用しての錆の道である、代わりにtrait objectsを使用してに見たいと思うかもしれません:
pub trait MyTrait: Debug {
// you can still use Any by doing MyTrait: Any + Debug
// Note that you won't be able to derive PartialEq for your trait
// because PartialEq can't be made into a TraitObject
// can also define whatever methods you would want on your data, which
// might be preferable to using Any, if possible
}
pub struct BertDirectory<T: MyTrait>{
data: Vec<(Box<MyTrait>, Box<MyTrait>)>
}
その方法T
の具体的なタイプではないだろうコンパイル時に知る必要があります。 data
の各要素は、具体的な型とは異なる可能性があり、正しいメソッドが自動的に呼び出されます。しかし、あなたはPartialEq
を派生させることができません。だから、自分でそれを実装しなければなりません。
あなたは 'AnyMap'を認識していますか? 'Any'から値を取り出すには、具体的な型を知る必要があることに注意してください。 @MatthieuM。 –
。確かに、私はそれについて知っていますあなたのタイプのための特性を実装する必要がありますが、AnyMapについて何か知りません。おそらくそれはいいかもしれませんが、このトピックで説明しているこの構成を書くことができるかどうか疑問です – Relrin
['AnyMap'](https://github.com/chris-morgan/anymap)はChris Morganと[' rust 「-typemap'」(https://github.com/reem/rust-typemap)は、Jonathan Reemによって調査されたものです。 –