3
どのように私は、この作品のようなものにすることができます:私は、S
が特色である必要がありますコンパイラに伝えるために、いくつかのタイプのマーカーを探し、このパターンの一部例えば錆のドキュメントを検索し、できませんでした1つのジェネリック型がRustに別のジェネリック型を実装するという制約を追加するには?
struct FooStruct<A, B> where A : B, B : ?Sized {...}
を同じ問題を抱えている他の人を見つける。ここに私のコードは次のとおりです。
trait Factory<S> where S : ?Sized {
fn create(&mut self) -> Rc<S>;
}
trait Singleton<T> {
fn create() -> T;
}
struct SingletonFactory<T> {
instance: Option<Rc<T>>
}
impl<S, T> Factory<S> for SingletonFactory<T> where S : ?Sized, T : S + Singleton<T> {
fn create(&mut self) -> Rc<S> {
if let Some(ref instance_rc) = self.instance {
return instance_rc.clone();
}
let new_instance = Rc::new(T::create());
self.instance = Some(new_instance.clone());
new_instance
}
}
コンパイラは次のエラーで失敗します。
--> src/lib.rs:15:57
|
15 | impl<S, T> Factory<S> for SingletonFactory<T> where T : S + Singleton<T> {
| ^not a trait
私は 'Unsize'の認識していなかった、それは確かに新たな扉を開きます! –
はい、それは深く文書に隠されていました:)このRFCはhttps://github.com/rust-lang/rfcs/blob/master/text/0401-coercions.mdに関するいくつかの情報を提供しています。あなたの助けをたくさんありがとう:) – Gdow
'Unsize'を掘り起こしてくれてありがとう、広告を無料で楽しむ;) –