Compartilhar via


Modelos e resolução de nomes

Nas definições de modelo, existem três tipos de nomes.

  • Declarada localmente nomes, incluindo o nome do modelo e todos os nomes declarados dentro da definição do modelo.

  • Nomes do escopo delimitador fora da definição do modelo.

  • Nomes que dependem de alguma forma os argumentos de modelo, conhecido como nomes de dependentes.

Enquanto os dois primeiros nomes também pertencem a classe e a função de escopos, regras especiais para a resolução de nomes são necessários em definições de modelo para lidar com a complexidade adicional de nomes dependentes.Isso ocorre porque o compilador sabe pouco sobre esses nomes até que o modelo é instanciado, porque poderiam ser totalmente diferentes tipos, dependendo de qual modelo argumentos são usados.Nomes independentes são pesquisados de acordo com as regras normais e no momento da definição do modelo.Esses nomes, sendo independente dos argumentos de modelo, são pesquisados de uma vez para todas as especializações do modelo.Nomes de dependentes não serão examinados até que o modelo é instanciado e são pesquisados separadamente para cada especialização.

Um tipo é dependente se ele varia de acordo com os argumentos de modelo.Especificamente, um tipo é dependente se ela for:

  • O modelo próprio argumento:

    T
    
  • Um nome qualificado com uma qualificação, incluindo o tipo de dependente:

    T::myType
    
  • Um nome qualificado se a parte não qualificada identifica um tipo de dependente:

    N::T
    
  • Uma const ou volátil tipo para o qual o tipo base é um tipo de dependente:

    const T
    
  • Um ponteiro, referência, matriz ou tipo de ponteiro de função com base em um tipo de dependente:

    T *, T &, T [10], T (*)()
    
  • Uma matriz cujo tamanho se baseia em um parâmetro de modelo:

    template <int arg> class X {
    int x[arg] ; // dependent type
    }
    
  • um tipo de modelo construído a partir de um parâmetro de modelo:

    T<int>, MyTemplate<T>
    

Dependência de tipo e a dependência de valor

Nomes e expressões dependentes de um parâmetro de modelo são categorizadas como dependentes do tipo ou valor dependente, dependendo se o parâmetro do modelo é um parâmetro de tipo ou um parâmetro de valor.Além disso, qualquer identificadores declarados em um modelo com um tipo de acordo com o argumento de modelo são considerados valor dependentes, como é um tipo integral ou enumeração inicializado com uma expressão de valor dependente.

Expressões de dependentes do tipo e valor dependente são aquelas que envolvem variáveis que são dependentes do tipo ou valor dependente.Essas expressões podem ter semântica que diferem, dependendo dos parâmetros usados para o modelo.

Consulte também

Outros recursos

Modelos