2010-06-18 4 views
10

Come nei contenitori stl, perché non è possibile accedere a un typedef all'interno della classe dall'istanza della classe? C'è una visione particolare di questo?Accesso al typedef dall'istanza


Quando value_type era un parametro di modello potrebbe aiutare rendere il codice più generale se non ci fosse la necessità di specificare i parametri del modello, come nel vettore :: value_type

Esempio:

class T { 
public: 
    typedef int value_type; 
    value_type i; 
}; 

T t; 
T::value_type i; // ok 
t.value_type i; // won't work 

risposta

5

Perché typedef è solo un sinonimo per un altro tipo. Non è un oggetto (membro della classe).

E come @Neil Butterworth ha menzionato: "Perché l'operatore. È l'operatore di accesso membro".

+0

E perché il. operatore è l'operatore di accesso _member_. –

+0

@Neil Butterworth: Grazie :) – sinek

0

Non vi è alcun motivo valido per utilizzare un operatore diverso per la risoluzione dell'ambito (::) piuttosto che per l'accesso membro (.) poiché non è mai ambiguo. È un fastidio, ma è solo il modo in cui è la lingua.


Alcuni linguaggi lo fanno in modo diverso anche se ...

  • C# utilizza . invece di ::, ma è ancora bisogno di utilizzare il nome della classe quando si accede tipi nidificati e membri statici.
  • D utilizza . e <instance>.<static nested type> equiv. A <type>.<static nested type>.
+0

Non è solo il diverso operatore. '::' è chiamato sul tipo, mentre '.' è chiamato sull'istanza. Ma ancora, anch'io non vedo nessuna buona ragione per non usare lo stesso. –