Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Шаблон элементов терминов относится как к шаблонам функций-членов, так и к шаблонам вложенных классов. Шаблоны функций-членов — это шаблоны функций, которые являются членами шаблона класса или класса.
Функции-члены могут являться функциями-шаблонами в нескольких контекстах. Все функции шаблонов классов являются универсальными, но не называются шаблонами элементов или шаблонами функций-членов. Если эти функции-члены принимают собственные аргументы шаблона, они считаются шаблонами функций-членов.
Пример. Объявление шаблонов функций-членов
Шаблоны функций-членов классов или шаблонов классов, отличных от шаблонов, объявляются как шаблоны функций с их параметрами шаблона.
// member_function_templates.cpp
struct X
{
template <class T> void mf(T* t) {}
};
int main()
{
int i;
X* x = new X();
x->mf(&i);
}
Пример: шаблон функции-член шаблона класса
В следующем примере показан шаблон функции-член шаблона класса.
// member_function_templates2.cpp
template<typename T>
class X
{
public:
template<typename U>
void mf(const U &u)
{
}
};
int main()
{
}
Пример. Определение шаблонов элементов вне класса
// 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()
{
}
Пример. Шаблонное преобразование, определяемое пользователем
Локальные классы не могут иметь шаблоны элементов.
Шаблоны функций-членов не могут быть виртуальными функциями. Кроме того, они не могут переопределить виртуальные функции из базового класса при объявлении с тем же именем, что и виртуальная функция базового класса.
В следующем примере показано преобразование, определяемое пользователем шаблоном:
// 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>.
}