Compartir a través de


Plantillas y resolución de nombres

en definiciones de plantilla, hay tres tipos de nombres.

  • Nombres localmente declarados, incluido el nombre de la propia plantilla y los nombres declarados dentro de la definición de plantilla.

  • Nombres del ámbito de inclusión fuera de la definición de plantilla.

  • Nombres que dependen de alguna manera de los argumentos de plantilla, denominados nombres dependientes.

Mientras que los primeros dos nombres también pertenecen a ámbitos de clase y función, las reglas especiales para la resolución de nombres se requieren en definiciones de plantilla utilicen la complejidad agregada de nombres dependientes.Esto se debe a que el compilador sabe poco sobre estos nombres hasta que se cree instancias de la plantilla, porque pueden ser tipos completamente diferentes dependiendo de los que se utilizan los argumentos.Los nombres de Nondependent se examinan para buscar según las reglas usuales y actualmente la definición de la plantilla.Estos nombres, ser independientes de los argumentos de plantilla, son de una vez por todas hacia arriba miradas especializaciones de la plantilla.Los nombres dependientes no se muestran hasta que se cree instancias de la plantilla y se examinan para buscar por separado para cada especialización.

Un tipo depende si depende de los argumentos.Específicamente, un tipo depende si es:

  • El propio argumento de plantilla:

    T
    
  • Un nombre completo con una clasificación incluido un tipo dependiente:

    T::myType
    
  • Un nombre completo si la parte incompleta identifica un tipo dependiente:

    N::T
    
  • Un const o volatile un tipo para los que el tipo base es un tipo dependiente:

    const T
    
  • Un puntero, una referencia, una matriz, o un tipo de puntero a función basado en un tipo dependiente:

    T *, T &, T [10], T (*)()
    
  • Una matriz cuyo tamaño se basa en un parámetro de plantilla:

    template <int arg> class X {
    int x[arg] ; // dependent type
    }
    
  • un tipo de plantilla construido de un parámetro de plantilla:

    T<int>, MyTemplate<T>
    

Dependencia de tipo y dependencia de valor

Los nombres y las expresiones dependientes en un parámetro de plantilla se clasifican como dependiente tipo o dependiente del valor, dependiendo de si el parámetro de plantilla es un parámetro de tipo o un parámetro de valor.Además, cualquier identificador declarado en una plantilla con un dependiente del tipo del argumento de plantilla se considera dependiente de valores, como entero o un tipo de enumeración inicializada con una expresión valor-dependiente.

las expresiones Tipo-dependientes y valor-dependientes son aquellas que implican las variables que están dependiente tipo o dependiente del valor.Estas expresiones pueden tener semántica diferentes, dependiendo de los parámetros utilizados para la plantilla.

Vea también

Otros recursos

Plantillas