Udostępnij za pośrednictwem


Szablony i rozpoznawanie nazw

W definicjach szablonów, istnieją trzy typy nazw.

  • Nazwy zadeklarowane lokalnie, wraz z nazwą samego szablonu i wszelkimi nazwami zadeklarowanymi wewnątrz jego definicji.

  • Nazwy z otaczającego zakresu na zewnątrz definicji szablonu.

  • Nazwy, które w jakiś sposób zależą od argumentów szablonu, nazywane nazwami zależnymi.

Mimo że dwie pierwsze nazwy dotyczą również zakresów klas i funkcji, to wymagane są specjalne reguły rozwiązywania nazw w definicjach szablonów, aby radzić sobie ze złożonością dodaną przez nazwy zależne.Jest to spowodowane faktem, że kompilator wie o tych nazwach niewiele, dopóki nie zostanie utworzone wystąpienie szablonu, dlatego że nazwy mogą mieć zupełnie różne typy, w zależności od użytych argumentów szablonu.Nazwy niezależne są wyszukiwane zgodnie ze zwykłymi regułami oraz w punkcie definicji szablonu.Nazwy te, będące niezależnymi argumentami szablonu, są wyszukiwane raz dla wszystkich jego specjalizacji.Nazwy zależne nie są wyszukiwane, dopóki nie zostanie utworzone wystąpienie szablonu, a wyszukiwanie następuje osobno dla każdej specjalizacji.

Typ jest zależny, jeśli zależy od argumentów szablonu.W szczególności, typ jest zależny, jeśli jest:

  • Argumentem szablonu:

    T
    
  • Nazwą kwalifikowaną z kwalifikacją zawierającą typ zależny:

    T::myType
    
  • Nazwą kwalifikowaną, jeśli część niekwalifikowana identyfikuje typ zależny:

    N::T
    
  • Typem "const" lub "volatile", którego typ podstawowy jest typem zależnym:

    const T
    
  • Wskaźnikiem, odwołaniem, tablicą lub wskaźnikiem do funkcji opartym na typie zależnym:

    T *, T &, T [10], T (*)()
    
  • Tablicą, której rozmiar jest oparty na parametrze szablonu:

    template <int arg> class X {
    int x[arg] ; // dependent type
    }
    
  • Typem szablonowym utworzonym z parametru szablonu:

    T<int>, MyTemplate<T>
    

Zależność typu i wartości

Nazwy i wyrażenia zależne od parametru szablonu są klasyfikowane jako zależne od typu lub zależne od wartości, w zależności od tego czy parametr szablonu jest parametrem typu, czy parametrem wartości.Ponadto, żaden identyfikator zadeklarowany w szablonie jako zależny od typu argumentu szablonu, nie jest uważany jako zależny od wartości, tak jak typ całkowity lub wyliczeniowy zainicjowany wyrażeniem zależnym od wartości.

Wyrażenia zależne od typu i wartości są wyrażeniami, które zawierają zmienne zależne od typu lub wartości.Wyrażenia te mogą mieć różną semantykę, w zależności od użytych parametrów szablonu.

Zobacz też

Inne zasoby

Szablony