2010-06-18 6 views
10

Comme dans les conteneurs stl, pourquoi ne pouvons-nous pas accéder à un typedef dans la classe à partir de l'instance de classe? Y a-t-il un aperçu particulier de cela?Accéder à typedef depuis l'instance


Lorsque value_type était un paramètre de modèle, il pourrait aider à rendre le code plus général, s'il n'y avait pas la nécessité de préciser les paramètres du modèle comme dans le vecteur :: value_type

Exemple:

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

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

Répondre

5

Parce que le typedef est juste un synonyme d'un autre type. Ce n'est pas un objet (membre de la classe).

Et comme @Neil Butterworth mentionné: "Parce que l'opérateur. Est l'opérateur d'accès membre."

+0

Et parce que le. L'opérateur est l'opérateur d'accès _member_. –

+0

@Neil Butterworth: Merci :) – sinek

0

Il n'y a pas de bonnes raisons d'utiliser un opérateur différent pour la résolution de la portée (::) que pour l'accès au membre (.) car il n'est jamais ambigu. C'est un ennui, mais c'est juste la façon dont la langue est.


Certaines langues font différemment si ...

  • C# utilise . au lieu de ::, mais vous devez toujours utiliser le nom de la classe lors de l'accès types imbriqués et membres statiques.
  • D utilise . et <instance>.<static nested type> équivaut à <type>.<static nested type>.
+0

Ce n'est pas seulement l'opérateur différent. '::' est appelé sur le type, alors que '.' est appelé sur l'instance. Mais encore, je ne vois pas non plus de bonnes raisons de ne pas en faire autant. –

Questions connexes