C++——成员模板

C++模板支持“成员模板”新特性。即模板可以用作结构、类或模板类的成员。在完全实现STL设计的过程中,必须使用这项特性。成员模板的定义一般为任意类(可以是类模板,也可以不是类模板)可以拥有类模板或函数模板作为其成员。

在ISO/IEC 14882:2003(E)中,关于成员模板的说明是:一个模板可以在-一个类或类模板中声明,这样的类模板称为成员模板;成员模板的定义既可以在类(或类模板)定义内部,也可以在类(或类模板)定义的外部:当类模板的成员模板在类模板定义的外部定义时,应该完整地指定类模板的参数和成员模板的参数。例如:

template <class T>template <class I> void queue::assign(I beg, I end);

上述代码中template < class T>是类模板,作为第一个模板形参表; template< class T>是成员模板,作为第二个模板形参表。

下面举例说明:

template <class T>class string   //类模板string
{
public:
	template<class T2>int compare (const. T2&);
}

template <class T>template<class T2>int string<T>: :compare (const T2& s)         //在类外部定义成员函数
{
	......
}

上述代码在类模板string中,使用了另一个类模板类型的成员函数。

template <typename T> class bC
{
public;
	template <typename V> class HC   //类模板HC作为模板bC的成员
	{
	public:
		V m;
		V n;
	public:
		HC(){} ;
		void show() {cout<<m<<endl;};
	}
	HC <T> A;
	HC<int>B;
public:
	bC(){};
	template <typename U>U show m(){ };   //类模板定义成 员函数
}

上述代码举例说明使用类模板作为另一类模板的成员。另外,成员模板具有一些使用规则。

  • 成员模板遵循常规访问控制;
  • 成员模板不能为虚(virtue);
  • 局部类不能拥有成员模板;
  • 析构器不能是模板类型;
  • 成员函数模板不能重载基类的虚函数;
  • 成员模板具有复杂的转换功能。

总结: 最简单的理解即在类模板中包含类模板,被包含的类模板作为其成员。

你可能感兴趣的:(C++基础,c++)