Qualcosa mi sono trovato a fare spesso ultimamente sta dichiarando typedef rilevanti per una particolare classe all'interno di quella classe, vale a direErrori di battitura interni in C++ - stile buono o cattivo stile?
class Lorem
{
typedef boost::shared_ptr<Lorem> ptr;
typedef std::vector<Lorem::ptr> vector;
//
// ...
//
};
Questi tipi sono poi utilizzati in altre parti del codice:
Lorem::vector lorems;
Lorem::ptr lorem(new Lorem());
lorems.push_back(lorem);
motivi che mi piace iT:
- si 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 è intesa come riferimento conteggiata tramite
boost::shared_ptr
e memorizzata in un vettore. - Consente di cambiare l'implementazione, ad esempio se Lorem dovesse essere modificato per essere considerato conteggio intrusivo (tramite
boost::intrusive_ptr
) in una fase successiva, ciò avrebbe un impatto minimo sul codice. - Penso che sembri "più carino" ed è discutibilmente più facile da leggere.
ragioni che non mi piace:
- a volte ci sono problemi con le dipendenze - se si desidera incorporare, diciamo, un
Lorem::vector
all'interno di un'altra classe, ma solo bisogno (o vogliono) per inoltrare declare Lorem (al contrario di introdurre una dipendenza dal suo file di intestazione), si finisce per dover usare i tipi espliciti (es.boost::shared_ptr<Lorem>
piuttosto cheLorem::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 codifica, quindi sarebbe bello avere qualche altra opinione su di esso in modo da poter sezionare un po 'il mio pensiero.
Questo è un buon punto, mi chiedo che sembrare "più carina" è stato il mio subconscio sottolineando delicatamente che lo scopo limitato è una cosa * buona *. Mi chiedo però, il fatto che lo STL lo usi prevalentemente nei modelli di classe ne fa un uso leggermente diverso? È più difficile giustificare in una classe 'concreta'? –
Beh, la libreria standard è composta da modelli piuttosto che da classi, ma penso che la giustificazione sia la stessa per entrambi. –