per qualche ragione sto pensando di implementare l'interfaccia all'interno di una qualche funzione (metodo) come classe locale.Implementare la classe astratta come classe locale? pro e contro
consideri seguente:
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;
}
le ragioni per cui lo sto facendo sono:
- sono pigro per implementare classe (B) in file separati
- MethodToOverride pochi delegati chiamano ad altra classe
- Classe B non dovrebbe essere visibile ad altri utenti
- nessuna necessità di preoccuparsi ab Eliminazione di unInst poiché i puntatori intelligenti vengono utilizzati nell'implementazione reale
Quindi la mia domanda è se sto facendo bene?
Grazie in anticipo!
Perché non puoi semplicemente definire 'B' completamente (non locale) nel file di implementazione per' A'? –
Solo un nitpick, ma A dovrebbe avere un distruttore virtuale – jpalecek
A è solo un'interfaccia - dichiarata in un file di intestazione. Inoltre, B non può essere visibile all'esterno dell'unità di traduzione in cui è definita GetPtrToAImplementation. – sinek