我尝试获得更通用的东西,但是在尝试使用关联类型时失败。鉴于是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
}
}
我想实现为t帽子set_shape
方法将返回RectangleBuilder
如果给定shape
的类型为Rectangle
执行建设者需要以初始化一个新的实例参数,或者他们应该是不带参数constructible? –
实际上是 - 位是某种存根实现 - 首先要实现从呈现器到返回的构建器的转换。您可能已经意识到我尝试在此创建构建器模式。 – xetra11
我想我没有正确说出我的第一条评论。为了构建一个构建器,你是否需要参数,或者每个ShapeBuilder的实现都必须支持没有参数的构造? –