por alguna razón, estoy pensando en implementar la interfaz dentro de alguna función (método) como clase local.¿Implementar clase abstracta como una clase local? pros y contras
Considere lo siguiente:
class A{
public:
virtual void MethodToOverride() = 0;
};
A * GetPtrToAImplementation(){
class B : public A {
public:
B(){}
~B(){}
void MethodToOverride() {
//do something
}
};
return static_cast<A *>(new B());
}
int _tmain(int argc, _TCHAR* argv[])
{
A * aInst = GetPtrToAImplementation();
aInst->MethodToOverride();
delete aInst;
return 0;
}
las razones por las que estoy haciendo esto son:
- soy perezoso para implementar la clase (B) en archivos separados
- MethodToOverride sólo llaman a los delegados a otra clase
- La clase B no debería estar visible para otros usuarios
- sin necesidad de preocuparse ab eliminando unInst ya que los punteros inteligentes se utilizan en la implementación real
Así que mi pregunta es si lo estoy haciendo bien?
¡Gracias de antemano!
¿Por qué no puede simplemente definir 'B' completamente (no local) en el archivo de implementación para' A'? –
Solo un pequeño detalle, pero A debería tener un destructor virtual – jpalecek
A es solo una interfaz, declarada en un archivo de encabezado. Además, B no puede ser visible fuera de la unidad de traducción donde se define GetPtrToAImplementation. – sinek