Udostępnij za pośrednictwem


Szablony składowych funkcji

Termin Szablon składowy odnosi się zarówno do szablonów funkcji składowych, jak i szablonów klas zagnieżdżonych. Szablony funkcji składowych to szablony funkcji, które są elementami członkowskimi szablonu klasy lub klasy.

Funkcje członkowskie mogą być szablonami funkcji w kilku kontekstach. Wszystkie funkcje szablonów klas są ogólne, ale nie są nazywane szablonami składowych ani szablonami funkcji składowych. Jeśli te funkcje składowe przyjmują własne argumenty szablonu, są uważane za szablony funkcji składowych.

Przykład: deklarowanie szablonów funkcji składowych

Szablony funkcji składowych klas innych niż szablony lub szablony klas są deklarowane jako szablony funkcji z ich parametrami szablonu.

// member_function_templates.cpp
struct X
{
   template <class T> void mf(T* t) {}
};

int main()
{
   int i;
   X* x = new X();
   x->mf(&i);
}

Przykład: szablon funkcji składowej szablonu klasy

W poniższym przykładzie przedstawiono szablon funkcji składowej szablonu klasy.

// member_function_templates2.cpp
template<typename T>
class X
{
public:
   template<typename U>
   void mf(const U &u)
   {
   }
};

int main()
{
}

Przykład: Definiowanie szablonów składowych poza klasą

// defining_member_templates_outside_class.cpp
template<typename T>
class X
{
public:
   template<typename U>
   void mf(const U &u);
};

template<typename T> template <typename U>
void X<T>::mf(const U &u)
{
}

int main()
{
}

Przykład: konwersja zdefiniowana przez użytkownika w szablonie

Klasy lokalne nie mogą mieć szablonów składowych.

Szablony funkcji członkowskich nie mogą być funkcjami wirtualnymi. Ponadto nie mogą zastąpić funkcji wirtualnych z klasy bazowej, gdy są deklarowane przy użyciu tej samej nazwy co funkcja wirtualna klasy bazowej.

W poniższym przykładzie przedstawiono konwersję zdefiniowaną przez użytkownika z szablonem:

// templated_user_defined_conversions.cpp
template <class T>
struct S
{
   template <class U> operator S<U>()
   {
      return S<U>();
   }
};

int main()
{
   S<int> s1;
   S<long> s2 = s1;  // Convert s1 using UDC and copy constructs S<long>.
}

Zobacz też

Szablony funkcji