Preferisco ridurre al minimo l'uso di #include
nei miei file di intestazione, utilizzando le dichiarazioni anticipate laddove possibile, e credo che ciò sia considerato una buona pratica.I puntatori intelligenti infrangono il principio di minimizzare #include nei file di intestazione?
Funziona benissimo se ho una dichiarazione di metodo come:
bool IsFlagSet(MyObject *pObj);
Tuttavia se ho typedef Ptr<MyObject> MyObjectPtr
in MyObject.h
ei cambiamenti API a:
bool IsFlagSet(MyObjectPtr pObj);
Non ora devo a #include "MyObject.h"
? C'è un modo per aggirare questo, o è solo il prezzo che si paga per l'utilizzo di puntatori intelligenti?
Perché non 'bool IsFlagSet (Ptr pObj);'? –
Se si passa il puntatore intelligente per riferimento, non funzionerà come prima? –
P.S. A meno che la funzione non cambi la proprietà del puntatore intelligente, non è necessario utilizzare un puntatore intelligente nell'interfaccia. Usa invece uno stupido e usa il puntatore intelligente 'get' sul sito di chiamata. –