1
考慮定義特徵RefGen
,結構Facade
的代碼,該結構具有可以容納RefGen
的屬性和兩個不同的new_*
方法,該方法將爲RefGen
選擇不同的具體實現。我是否需要多個impl塊來實現爲類型參數設置具體類型的多個方法?
trait RefGen {
fn gen() -> String;
}
struct FooGen;
impl RefGen for FooGen {
fn gen() -> String {
"foo".to_owned()
}
}
struct BarGen;
impl RefGen for BarGen {
fn gen() -> String {
"bar".to_owned()
}
}
struct Facade<R: RefGen> {
gen: R
}
impl Facade<FooGen> {
fn new_foogen() -> Self {
Facade {
gen: FooGen
}
}
}
impl Facade<BarGen> {
fn new_bargen() -> Self {
Facade {
gen: BarGen
}
}
}
fn main() {}
它的工作原理,但它令我感到困惑,我需要爲兩個impl
塊?
你能說明你打算如何使用你的Facade?我懷疑你正試圖獲得動態調度,並希望在這裏使用某種形式的特質對象。 –
這可能只是一箇中間步驟,因爲設計目前處於早期設計階段。不過,我可以想象在外觀上有三種方法。 'new(ref_gen:R)'會讓用戶決定使用哪個'RefGen',而'new_with_foo'和'new_with_bar'會設置具體的'RefGen'實現。就我所知,沒有動態調度。 –
Christoph