Sdílet prostřednictvím


Šablony a překlad

Definice šablon jsou tři typy názvů.

  • Názvy místně deklarována, včetně názvu samotné šablony a všechny názvy deklarované uvnitř definice šablony.

  • Názvy z vnějšího oboru mimo definici šablony.

  • Názvy, které nějakým způsobem, závisí na šabloně argumenty uvedené jako názvy závislé.

Zatímco první dvě jména se týkají také obory třídy a funkce, zvláštní pravidla pro překlad názvů jsou povinni v definicích šablony zabývat přidaného složitost závislé názvy.Je to proto, že kompilátor ví málo o tyto názvy dokud šablona je vytvořena instance, protože by mohly být zcela odlišné typy v závislosti na šablonu, která se používají argumenty.Sobě názvy jsou vyhledávány podle obvyklých pravidel Definice šablony a na jeho místě.Tyto názvy, je nezávislé na argumenty šablony jsou vyhledávány jednou pro všechny šablony specializace.Názvy závislých se hledají není, dokud je vytvořena šablona a jsou vyhledávány odděleně pro každou odbornost.

Typ závisí, pokud je závislý na argumenty šablony.Konkrétně je závislé, pokud je typ:

  • Argument, samotné šablony:

    T
    
  • Kvalifikovaný název kvalifikace včetně závislé typu:

    T::myType
    
  • Kvalifikovaný název, pokud části neúplných identifikuje závislé typu:

    N::T
    
  • Typ const nebo volatile jehož základní typ je závislé typu:

    const T
    
  • Ukazatel, referenční, pole nebo typ ukazatel funkce založené na závislé typu:

    T *, T &, T [10], T (*)()
    
  • Matice, jejíž velikost je založena na parametru šablony:

    template <int arg> class X {
    int x[arg] ; // dependent type
    }
    
  • Typ šablony, vyrobeno z parametru šablony:

    T<int>, MyTemplate<T>
    

Závislost typu a hodnota závislost

Názvy a výrazy, které jsou závislé na parametru šablony jsou rozděleny do kategorií závislé na typu nebo hodnotu závislé v závislosti na tom, zda se jedná o parametr typu nebo parametr hodnota parametru šablony.Také všechny identifikátory deklarovat v šabloně závislé na šablonu argument typu jsou považovány za hodnotu závislé, jako je typ integrál nebo výčet inicializován s závislé na hodnotě výrazu.

Výrazy, které zahrnuje proměnné, které jsou závislé na typu nebo závislé hodnoty jsou závislé na typu a závislé na hodnotě výrazy.Tyto výrazy mohou být sémantiku, který se liší v závislosti na parametry použité šablony.

Viz také

Další zdroje

Šablony