Поделиться через


Шаблоны функции-члена

Шаблон элемента термина относится к обоим шаблонам функции-члена и вложенных шаблонов класса.Шаблоны функции-члена функции шаблона, какие члены класса или шаблона класса.Дополнительные сведения см. в разделе Вложенные шаблоны класса.

Функции-члены могут быть шаблонами функции в нескольких контекстах.Все функции шаблонов класса родовы, но не именуются шаблоны элемента или шаблоны функции-члена.Если такие функции-члены принимают собственные аргументы шаблона, они считаются шаблоны функции-члена.Дополнительные сведения см. в разделе функции-члены классов шаблона.

Пример

Шаблоны функции-члена классов nontemplate или шаблона объявляются как шаблоны функции и их параметров шаблона.

// 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()
{
}

Кроме того, в Visual Studio .NET 2003 и более поздних, шаблоны элементов можно также определять вне класса.

// 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()
{
}

Локальные классы не могут иметь шаблоны элемента.

Функции шаблона члена не могут быть виртуальными функциями и не могут переопределить виртуальные функции от базового класса, когда они объявлены с тем же именем, что виртуальная функция базового класса.

Поддержка Visual C++ .NET 2003, созданной для шаблонного определенных пользователем преобразований.Следующий пример работает в Visual C++ .NET 2003 в соответствии с стандартом.

// 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>.
}

См. также

Ссылки

Шаблоны функции