Il nesting typedef è un buon stile?

2

Diciamo che ho uno spazio dei nomi my e questo spazio dei nomi contiene una classe foo .

Che cosa preferirei annidare typedef nella mia classe o tenerlo nel mio spazio dei nomi?

namespace my {

class foo {
  // some stuff

  // nested one
  typedef bar my_foo_bar;

};

// or namespaced one
typedef bar my_foo_bar;

}

Guardando le std-libs la maggior parte delle cose è la variante namespace.

(forse un brutto esempio ma ...) istream non è nidificato in iostream (a questo punto intendo solo il modo di usare - > std :: fstream, std :: istream, ...), quindi io può usarlo direttamente ma anche la lista delle possibili funzioni è abbastanza grande in std ::

Potrei fare entrambe le cose. La prima variante è più incapsulata ma anche se devo ereditarmi molto devo digitare molto (my :: foo :: inh :: and :: so :: on) se non userò using [namespace] .

Per prima cosa ho pensato che la variante annidata è più bella a causa dell'incapsulamento di ciò che voglio avere nello stesso "gruppo". Potrei anche creare un nuovo spazio dei nomi all'interno del mio, ma poi devo anche digitare ogni volta il nuovo spazio dei nomi (anche senza usare [namespace]).

    
posta itwasntpete 12.09.2013 - 01:24
fonte

1 risposta

3

Penso che la tua scelta qui dipenda molto dal contesto.

Come insieme generale di linee guida, direi, in ordine di importanza decrescente:

  • scrivi il tuo codice una volta e lo leggi una o più volte. Cosa pensi di fare con il tuo tipo? Che tipo di codice dovresti scrivere, incluso? Ottimizza per la massima leggibilità, il più delle volte.
  • generalmente, è meglio usare lo spazio dei nomi più limitato possibile per il typedef. Quindi, se lo stai usando solo all'interno della classe, definiscilo lì. Se stai cercando di accedervi da altri luoghi, che hanno accesso allo spazio dei nomi, lasciatelo fuori dalla classe
  • come euristico, nel mio lavoro, mi trovo a inserire i typedef nelle classi più spesso del solito. Quindi, se non sono del tutto sicuro e sotto pressione per decidere rapidamente, comincio inserendo il typedef nella classe e rifattorizzandolo se risulto essere sbagliato. Per te, puoi guardare il codice circostante e copiare la loro decisione, per ora, se hai fretta
risposta data 12.09.2013 - 03:47
fonte

Leggi altre domande sui tag