2010-06-18 17 views
10

Warum können wir in stl-Containern nicht auf einen typedef innerhalb der Klasse von der Klasseninstanz aus zugreifen? Gibt es dafür einen besonderen Einblick?Zugriff auf typedef von der Instanz aus


Wenn value_type war ein Template-Parameter könnte es machen allgemeinere Code helfen, wenn es nicht die Notwendigkeit, die Template-Parameter wie in vector :: value_type

Beispiel zu geben ist:

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

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

Antwort

5

Weil das Typedef nur ein Synonym für einen anderen Typ ist. Es ist kein Objekt (Mitglied der Klasse).

Und wie @Neil Butterworth erwähnt: "Weil der. Operator der Mitgliedszugriffsoperator ist."

+0

Und weil die. operator ist der Zugriffsoperator _member_. –

+0

@Neil Butterworth: Danke :) – sinek

0

Es gibt keinen guten Grund, einen anderen Operator für die Bereichsauflösung (::) als für den Elementzugriff (.) zu verwenden, da dieser niemals mehrdeutig ist. Es ist ein Ärger, aber es ist nur so, wie die Sprache ist.


Einige Sprachen machen es anders, obwohl ...

  • C# verwendet . statt ::, aber Sie müssen noch den Klassennamen verwenden, wenn verschachtelte Typen und statische Member zugreifen.
  • D verwendet . und <instance>.<static nested type> ist äquivalent zu <type>.<static nested type>.
+0

Es ist nicht nur der andere Betreiber. '' 'wird für den Typ aufgerufen, während' .' für die Instanz aufgerufen wird. Aber ich sehe auch keinen Grund, das nicht zu benutzen. –

Verwandte Themen