术语成员模板引用了成员函数模板和嵌套类模板。 成员函数模板是类或类模板的成员的函数模板。

成员函数可以是多个环境中的函数模板。 类模板的所有函数都是泛型函数,但不称为成员模板或成员函数模板。 如果这些成员函数采用其自己的模板参数,则它们被视为成员函数模板。

示例:声明成员函数模板

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

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