3
我怎樣才能讓這樣的工作:如何添加約束一個泛型類型實現了鏽另一個泛型類型?
struct FooStruct<A, B> where A : B, B : ?Sized {...}
我搜索了某種類型的標記告訴編譯器S
必須是一個特點,搜索這種模式的一些例子鏽文件,並不能發現有同樣的問題其他人。這裏是我的代碼:
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。感謝挖'Unsize'很多關於你的幫助:)再次感謝 – Gdow
,SO享受無廣告) –