Szablony funkcji Członkowskich
Szablon Członkowskie termin odnosi się zarówno szablony funkcji Członkowskich i szablonów zagnieżdżonych klasy.Szablony funkcji Członkowskich są funkcje szablonu, które są członkami danej klasy lub szablonu klasy.Aby uzyskać więcej informacji, zobacz Zagnieżdżone szablony klasy.
Funkcji elementów członkowskich może być szablony funkcji w kilku kontekstów.Wszystkie funkcje klasy szablony są ogólne, ale nie są określone jako szablony Członkowskich lub szablony funkcji Członkowskich.Jeżeli te funkcje składowe przyjmują własne argumenty szablonu, są one uważane za Członkowskie funkcji szablonów.Aby uzyskać szczegółowe informacje, zobacz Członkowskich funkcje szablonu klasy.
Przykład
Szablony funkcji Członkowskich klasy nontemplate lub szablonu 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);
}
W poniższym przykładzie pokazano członka funkcji szablonu klasy szablonu.
// member_function_templates2.cpp
template<typename T>
class X
{
public:
template<typename U>
void mf(const U &u)
{
}
};
int main()
{
}
Ponadto w programie Visual Studio.NET 2003 lub nowszym, członka, którego można także zdefiniować szablony poza klasy.
// 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()
{
}
Klasy lokalne nie są dozwolone Członkowskie szablony.
Funkcje szablon Członkowskie nie może być funkcje wirtualnych i nie może zastąpić funkcje wirtualnych z klasy bazowej, gdy są one zgłoszone z taką samą nazwę jak funkcję wirtualną klasy podstawowej.
Visual C++.NET 2003 wprowadzono obsługę opartą na szablonie konwersje zdefiniowane przez użytkownika.Poniższy przykład działa w programie Visual C++.NET 2003, jak określono w normie.
// 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>.
}