In effetti non e' molto chiara la richiesta.
Il primo punto e' il metodo set della classe Interfaccia: dato che passo un puntatore che per i piu' disparati motivi potrebbe non essere quello atteso dal dato membro mBase, e dato che il senso del metodo e' quello di settare i dati che gli passo, mi sembra fuorviante o comunque poco consistente permettere che venga cambiato il tipo di mBase secondo il tipo di Struct che gli passo. Se ho creato un oggetto di un certo tipo e gli passo una struttura dati di un tipo diverso, col solo metodo set implementato non riesco a capire se cambio il tipo di mBase per errore mio o perche' lo voglio veramente, ma a quel punto vale la pena implementare forse un metodo dedicato che faccia questo.
Altra cosa se mBase non e' ancora stato inizializzato o per qualsiasi motivo e' diventato nullptr: anche in questo caso, nella logica per cui viene implementato il metodo set, cioe' settare i dati membro di un oggetto, se mBase e' nullptr lo inizializzo col metodo set, o meglio sollevare un'eccezione?
Per il metodo getType: se mBase e' nullptr, cosa ha piu' senso, eccezione o restituisco comunque un valore che indica che mBase in realta' e' nullptr?
Stessa cosa per get: se mBase e' nullptr, che si fa di solito, restituisco un nullptr, indice della situazione anomala, o eccezione?
Mi rendo conto che sono scelte personali, che una volta fatte e messe nei commenti al codice, sia una che l'altra strada possono essere valide, pero' vorrei sapere cosa si tende a fare in genere in queste situazioni.
Per i metodi delle classi derivate, in base a quanto scelto per la classe interfaccia, si opera di conseguenza.
Questa mi incuriosisce, chiedo troppo se chiedo "come la semplificheresti?"
Grazie.