Qualcosa che mi sono ritrovato a fare spesso ultimamente è dichiarare dattiloscritti rilevanti per una particolare classe all'interno di quella classe, cioè
class Lorem
{
typedef boost::shared_ptr<Lorem> ptr;
typedef std::vector<Lorem::ptr> vector;
//
// ...
//
};
Questi tipi vengono quindi utilizzati altrove nel codice:
Lorem::vector lorems;
Lorem::ptr lorem( new Lorem() );
lorems.push_back( lorem );
Ragioni che mi piacciono:
- Riduce il rumore introdotto dai modelli di classe,
std::vector<Lorem>
diventaLorem::vector
, ecc. - Serve come una dichiarazione di intenti: nell'esempio sopra, la classe Lorem deve essere contata come riferimento
boost::shared_ptr
e memorizzata in un vettore. - Permette di cambiare l'implementazione, ovvero se Lorem dovesse essere modificato per essere contato in modo intrusivo
boost::intrusive_ptr
in un secondo momento (via ), ciò avrebbe un impatto minimo sul codice. - Penso che appaia "più bello" ed è probabilmente più facile da leggere.
Ragioni che non mi piacciono:
- A volte ci sono problemi con le dipendenze - se vuoi incorporare, diciamo,
Lorem::vector
all'interno di un'altra classe ma devi solo (o vuoi) inoltrare dichiarare Lorem (invece di introdurre una dipendenza sul suo file di intestazione), allora devi finire per usare tipi espliciti (ad es.boost::shared_ptr<Lorem>
anzichéLorem::ptr
), che è un po 'incoerente. - Potrebbe non essere molto comune, e quindi più difficile da capire?
Cerco di essere obiettivo con il mio stile di programmazione, quindi sarebbe bene avere qualche altra opinione su di esso in modo da poter analizzare un po 'il mio pensiero.