2010-06-18 15 views
10

Al igual que en los contenedores stl, ¿por qué no podemos acceder a un typedef dentro de la clase desde la instancia de clase? ¿Hay una visión particular de esto?Accediendo a typedef desde la instancia


Cuando value_type era un parámetro de plantilla que podría ayudar a hacer el código más general si no había la necesidad de especificar los parámetros de plantilla como en el vector :: value_type

Ejemplo:

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

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

Respuesta

5

Porque typedef es solo un sinónimo de otro tipo. No es un objeto (miembro de la clase).

Y como @Neil Butterworth mencionó: "Porque el operador. Es el operador de acceso de miembros".

+0

Y porque el. el operador es el operador de acceso _member_. –

+0

@Neil Butterworth: Gracias :) – sinek

0

No hay una buena razón para utilizar un operador diferente para la resolución de alcance (::) que para el acceso de miembro (.) ya que nunca es ambiguo. Es una molestia, pero así es el lenguaje.


Algunos lenguajes hacen de manera diferente aunque ...

  • C# utiliza en lugar de .::, pero que todavía tienen que utilizar el nombre de la clase cuando se accede a los tipos anidados y los miembros estáticos.
  • D usa ., y <instance>.<static nested type> es equivalente a <type>.<static nested type>.
+0

No es solo el operador diferente. '::' se invoca en el tipo, mientras que '.' se invoca en la instancia. Pero aún así, tampoco puedo ver una buena razón para no usar el mismo. –

Cuestiones relacionadas