Как я могу сделать что-то вроде этой работы:Как добавить ограничение, что один родовой тип реализует другой родовой тип в Rust?
struct FooStruct<A, B> where A : B, B : ?Sized {...}
Я искал какой-то тип маркера, чтобы сообщить компилятору, что S
должна быть черта, искали документацию Rust для некоторого примера этой модели, так и не смог найти других людей, имеющих ту же проблему. Вот мой код:
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', наслаждайтесь SO ad-free;) –