Я пытаюсь получить что-то более общее, но не могу попробовать его со связанными типами. Дано значение Shape
и тип Renderer
, который пытается вернуть Builder
для определенного типа фигуры.Возвращение общего типа через связанный тип
форма
#[derive(Clone, Copy)]
pub struct Rectangle{
pub origin: Point,
pub height: usize,
pub width: usize,
}
pub trait Shape{
type Builder : ShapeBuilder;
}
impl Shape for Rectangle{
type Builder = RectangleBuilder;
}
строитель
pub trait ShapeBuilder{
type Renderer: ShapeRenderer;
fn set_origin() -> Self::Renderer;
}
pub struct RectangleBuilder;
impl ShapeBuilder for RectangleBuilder{
type Renderer = RectangleRenderer;
fn set_origin() -> Self::Renderer{
RectangleRenderer
}
}
визуализатор
pub struct Renderer<'a>{
canvas:&'a mut Canvas
}
impl <'a>Renderer<'a>{
pub fn new(canvas:&'a mut Canvas) -> Renderer {
Renderer{
canvas: canvas
}
}
pub fn set_shape<T: Shape>(&self, shape: T) -> T::Builder{
// trying to return the specific builder through shape::Builder
// or something like that
}
}
То, что я хочу достигнуть, т шляпа метод set_shape
вернет RectangleBuilder
если данный shape
имеет тип Rectangle
ли строители нужны параметры, чтобы инициализировать новый экземпляр, или они должны быть конструктивны без параметров? –
на самом деле да - бит - это какая-то реализация заглушки - сначала нужно добиться перехода от рендерера к возвращающему строителю. Возможно, вы уже поняли, что я пытаюсь создать шаблон строителя здесь. – xetra11
Я думаю, что не правильно сформулировал свой первый комментарий. Чтобы построить строитель, нужны ли вам параметры или должна ли каждая реализация поддержки ShapeBuilder поддерживать без параметров? –