1
我有內部對象,其should'nt由客戶機代碼可以使用:類方法VS助洗劑
class InternalA {};
class InternalB {};
我有公共接口對象A,B,C。在內部,我需要從A構造objetcs InternalA和InternalB,但A和B只能通過指向基類C的指針訪問。我可以使用協變虛擬方法,但是這樣做,我的內部變爲公共,而InternalA和InternalB實際上不是同一基類的兩個子類。 或者我可以做這樣的事情:
class C {
// some data
public:
C() {};
// some pure virtual methods and virtual methods
virtual C *getConcrete(void) const =0;
};
class B : C {
public:
//methods
virtual B *getConcrete(void) { return static_cast<B>(this); };
};
class A : C {
public:
//methods
virtual A *getConcrete(void) { return static_cast<A>(this); };
};
,然後使用內部生成器與A或多態性B法參數。
編輯: 要構建InternalA和InternalB,我可以使用一個這樣的功能/方法:
void somefunction(A *a) {
InternalA x(<using a->smthg>);
// do stuffs
};
void somefunction(B *b) {
InternalB x(using b->smthg>);
//do stuffs
};
你對這個黑客有什麼看法?
而且在哪裏呢'InternalA'或'InternalB '在你的榜樣中發揮作用? – RedX
內部構建器可以從指向對象A或B的指針構建它們。但要構建InternalA或InternalB,我需要具體的類A或B,因爲我需要選擇是否需要選擇具有類A或B的抽象類C,將構建InternalA或InternalB – Enjolras
您對此構建器功能有什麼樣的特徵?建立「A」或「B」對象會得到什麼樣的參數?但恕我直言'getConcrete'的情況下,如果罰款太多事件最終有點笨重。 – RedX