Šablony členských funkcí
Výraz člen šablony odkazuje na členské funkce šablony a vnořené šablony třídy.Členské šablony funkce jsou šablony funkce, které jsou členy třídy nebo šablony třídy.Další informace naleznete v tématu Vnořené šablony třídy.
Členské funkce mohou být šablony funkce v několika kontextech.Všechny funkce šablony třídy jsou obecné, ale nejsou uvedeny jako členské šablony nebo členské šablony funkce.Pokud tyto členské funkce přijímají své vlastní šablony argumentů, jsou považovány za členské šablony funkce.Další informace naleznete v tématu Členské funkce šablony třídy.
Příklad
Členské šablony funkce nešablonové nebo šablonové třídy jsou deklarovány jako šablony funkce s jejich šablonami parametrů.
// member_function_templates.cpp
struct X
{
template <class T> void mf(T* t) {}
};
int main()
{
int i;
X* x = new X();
x->mf(&i);
}
Následující příklad ukazuje členskou šablonu funkce šablony třídy.
// member_function_templates2.cpp
template<typename T>
class X
{
public:
template<typename U>
void mf(const U &u)
{
}
};
int main()
{
}
Dále, v systému Visual Studio .NET 2003 a novější, lze členské šablony definovat také mimo třídu.
// 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()
{
}
Místní třídy nemohou mít členské šablony.
Členské šablony funkce nemohou být virtuální funkce a nemohou přepsat virtuální funkce ze základní třídy, pokud jsou deklarovány pomocí stejného názvu jako virtuální funkce základní třídy.
Jazyk Visual C++ .NET 2003 uvedl podporu pro převody uživatelem definovaných šablon.Následující příklad funguje v jazyce Visual C++ .NET 2003 dle specifikací standardu.
// 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>.
}