成员函数模板

术语成员模板中引用成员函数模板和嵌套类模板。 成员函数模板是类或类模板的成员的模板函数。 有关更多信息,请参见 嵌套类模板

成员函数可以是函数模板在多个上下文。 类模板的所有功能是泛型的,但没有引用成员模板或成员函数模板。 如果这些成员函数采用其模板参数,它们视为成员函数模板。 有关详细信息,请参见 模板类的成员函数

示例

成员非模板或模板类函数模板声明为与其模板参数的函数模板。

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

局部类不允许有成员模板。

,这些声明的名称和一个基类虚函数同名时,成员模板函数不是虚函数,并且不能重写基类中的虚函数。

.NET 2003 引入的 Visual C++ 为模板化用户定义的转换支持。 下面的示例在 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>.
}

请参见

参考

函数模板