我有内部对象,客户端代码不应该使用它:
class InternalA {};
class InternalB {};
我有公共接口对象A,B,C。在内部,我需要从A构造objetcs InternalA,从B构造InternalB,但是A和B只能通过指向基类C的指针来访问。我可以使用协变虚方法但是做所以,我的 Internals 变得公开,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
};
你怎么看这个黑客?