2012-03-26 8 views
8

Ho incontrato diverse menzioni sul metodo opDot, che consente di sovraccaricare l'accesso ai membri, ovvero l'operatore punto, ma manca la documentazione ufficiale. Sicuramente non viene abbandonato, come std.typecons.Unique ne fa uso.d2: Che cosa è la semantica di opDot?

Qualcuno sa, come opDot può essere utilizzato e perché non c'è documentazione a riguardo?

+3

Prova questo: http://www.digitalmars.com/d/archives/digitalmars/D/learn/how_to_use_opdot_14509.html – Raxillan

risposta

12

opDot è stato scheduled for deprecation. Ecco perché non è documentato. Non usarlo Utilizzare invece alias this. Puoi usarlo per creare un alias di un particolare tipo o funzione in un tipo in modo che possa agire come quel tipo. per esempio.

struct S 
{ 
    int value; 
    alias value this; 
} 

sarà fare in modo che una variabile di tipo S implicitamente convertire in int utilizzando S s' value campo. È inoltre possibile funzioni alias in questo modo:

struct S 
{ 
    int get() 
    { 
     return 7; 
    } 

    alias get this; 
} 

però che possono essere più limitante, in quanto DMD attualmente non supporta avere più alias this es per un tipo (dovrebbe finalmente però). In questo caso, è possibile trasmettere implicitamente S a un int, ma non viceversa. Regarldess, alias this è destinato all'implementazione di conversioni implicite.

Se alias this non è proprio quello che si desidera, un'altra possibilità è opDispatch. Ti consente di trasformare ciò che si trova sul lato destro del punto in altre cose (ad esempio, attiva tutte le chiamate su foo in bar). Ma, tra questi due, dovresti essere in grado di fare praticamente tutto quello che stavi pensando di fare con opDot (e molto altro ancora).

+0

Grazie, risposta molto chiara! – toriningen