#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
template <typename T>
void Func(T& a, T& b)
{
cout<<"a[0] = "<<a[0]<<endl;
cout<<"b[0] = "<<b[0]<<endl;
}
int main()
{
double a[10];
double b[20];
a[0] = 1.1;
b[0] = 2.2;
Func(a,b);
//
char c1[10];
char c2[20];
c1[0] = 'A';
c2[0] = 'B';
Func(c1,c2);
getch();
}
// 分析 T& 与T 的区别
// T&: double[10] 和 double[20] 或 char[10] 和 char[20]
// T: double* 或 char*
template <typename T>
void Func(T& a, T& b)
{
cout<<"a[0] = "<<a[0]<<endl;
cout<<"b[0] = "<<b[0]<<endl;
}
// 如果函数模板改成这样, 则会编译失败.
// error C2782: 'void Func(T &,T &)' : template parameter 'T' is ambiguous
// 它不可以把同一个T, 同时转换成 double[10]和doule[20]
参考 c++ Templates P165...
本文详细解析了C++模板函数中引用类型与指针类型的区别,并通过实例展示了如何在不同场景下灵活运用模板函数。
1548

被折叠的 条评论
为什么被折叠?



