12.4 模板的嵌套

    模板的套嵌可以理解为在另外一个模板里面定义一个模板。以模板(类或者函数)作为另一个模板(类或者函数)的成员,也称成员模板。

    提示 成员模板是不能声明为virtual的。

    12.4.1 函数成员模板

    可以将函数模板作为另一个类(必须是模板类)的成员,称为函数成员模板,其用法和普通成员函数类似,如示例代码12.9所示。

    代码12.9 成员模板示例MemberTemplate


    <———————————文件名:example1209.cpp———————————————-> 01 #include<iostream> 02 using namespace std; 03 template<class A> 04 class Test//Test类定义 05 { 06 public: 07 template<class B>//成员模板 08 A f(B); 09 }; 10 template<class A> 11 template<class B>//成员模板的定义 12 A Test<A>:f(B) 13 { 14 return A(B); 15 } 16 int main() 17 { 18 Test<int>t; 19 cout<<t. f(3.14)<<endl; 20 return 0; 21 }在VC 2005下编译,

    输出结果如下所示。


    3

    注意

    在VC 6下,上述代码无法编译通过,主要因为VC 6的编译器对模板的支持相对较差,所以推荐采用较新的编译器,如VC 2005。

    【代码解析】代码第8行定义了函数成员模板“A f(B);”,程序很简单,关键是掌握函数成员模板的定义方法。