1 //1.在类中完成声明与定义
2
3 #include <iostream>
4
5 template <class T1,class T2>
6 class A
7 {
8 public:
9 T1 i;
10 T2 t;
11 A(T1 i, T2 t) :i(i), t(t) {}
12 void print()
13 {
14 std::cout << i <<" " << t << std::endl;
15 }
16 //在模板类中定义一个模板类
17 template <class T>
18 class B
19 {
20 public:
21 T b;
22 B() {}
23 B(T b) :b(b) {}
24 void print()
25 {
26 std::cout <<"B:" << b << std::endl;
27 }
28 };
29 B<int> m_b;
30
31
32 //在模板类中定义一个模板函数
33 template <typename T>
34 void show(T t)
35 {
36 std::cout <<"show()" << t << std::endl;
37 }
38 };
39
40 int main()
41 {
42 A<int,int> a(1, 2);
43 a.print();
44 a.show(10); //这里也可以显示指定SHOW 参数类型 a.show<int>(10)
45 a.m_b.print();
46
47 A<int, int>::B<int> b(10); //创建一个A类里面的子类B
48 b.print();
49 return 0;
50 }
1 //2.在类中完成声明 在外部定义
2
3 #include <iostream>
4
5 template <class T1,class T2>
6 class A
7 {
8 public:
9 T1 i;
10 T2 t;
11 A(T1 i, T2 t) :i(i), t(t) {}
12 void print()
13 {
14 std::cout << i <<" " << t << std::endl;
15 }
16 //在模板类中定义一个模板类
17 //这里也可以写成一行 template <class T> class B
18 template <class T>
19 class B
20 {
21 public:
22 T b;
23 B() {}
24 B(T b) :b(b) {}
25 void print();
26
27 };
28 B<int> m_b;
29
30
31 //在模板类中定义一个模板函数
32 //这里也可以写成一行 template <typename T> void show(T t);
33 template <typename T>
34 void show(T t);
35
36 };
37 //这里也可以写成一行 template <class T1, class T2> template <class T> void A<T1, T2>::B<T>::print()
38 template <class T1, class T2>
39 template <class T>
40 void A<T1,T2>::B<T>::print()
41 {
42 std::cout << "B:" << b << std::endl;
43 }
44
45 //这里也可以写成一行 template <class T1, class T2> template <typename T> void A<T1, T2>::show(T t)
46 template <class T1, class T2>
47 template <typename T>
48 void A<T1, T2>::show(T t)
49 {
50 std::cout << "show()" << t << std::endl;
51 }
52
53 int main()
54 {
55 A<int,int> a(1, 2);
56 a.print();
57 a.show(10); //这里也可以显示指定SHOW 参数类型 a.show<int>(10)
58 a.m_b.print();
59
60 A<int, int>::B<int> b(10); //创建一个A类里面的子类B
61 b.print();
62 return 0;
63 }