Я пытаюсь сделать что-то более общее, но не могу попробовать это со связанными типами. Даны черта 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
ShapeBuilder
должна поддерживать конструкцию без параметров? - person Francis Gagné   schedule 07.09.2016set_origin()
будет единственным способом установить состояние для строителя - исходную точку формы, которая будет визуализироваться на самом деле. - person xetra11   schedule 07.09.2016