もっと汎用的なものを手に入れようとしましたが、関連する型で試してみることに失敗しました。特定の種類の形状に対してBuilder
を返そうとすると、Shape
の形質とRenderer
の型が与えられます。私が達成したい何ジェネリック型を関連する型で返す
形状
#[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ですshape
与え場合set_shape
方法はRectangleBuilder
を返します帽子はあなたが新しいSelf
をインスタンス化ShapeBuilder
トレイトの静的メソッドを提供する必要があるタイプRectangle
ビルダーは新しいインスタンスを初期化するためのパラメータが必要です、または彼らはパラメータなしで構築可能であるために仮定されていますか? –
実際にはい - ビットスタブの実装のいくつかの種類です - 最初にレンダラーから戻るビルダーへの移行を達成したい。あなたはすでにビルダーパターンを作成しようとしていることに気付いているかもしれません。 – xetra11
私は最初のコメントを正しく訳していないと思います。ビルダーを構築するには、パラメータが必要ですか、または 'ShapeBuilder'の各実装がパラメータなしで構築をサポートする必要がありますか? –