一.类模板元编程
#include<iostream>
template<int N>
struct data
{
enum { res = data<N - 1>::res + data<N - 2>::res};
};
template<>
struct data<1>
{
enum{res=1};
};
template<>
struct data<2>
{
enum{res=2};
};
int getdata(int n)
{
if (n == 1)
{
return 1;
}
else if (n == 2)
{
return 2;
}
else
{
return getdata(n-1)+getdata(n-2);
}
}
//using namespace std;
void main()
{
const int n = 40;
int num = data<n>::res;
std::cout << num << std::endl;;
std::cout << getdata(40) << std::endl;
std::cin.get();
}
二.类模板重载
#include<iostream>
#include<array>
using std::array;
template<typename T>
void showarray(array<T, 10> myarry, int n)
{
using namespace std;
cout << "T"<<endl;
for (int i = 0;i < n;i++)
{
cout <<' '<< myarry[i] ;
}
cout << endl;
/*for (auto i : myarry)
{
cout << i;
}*/
}
template<typename T>
void showarray(array<T*,10> myarry, int n)
{
using namespace std;
cout << "T*"<<endl;
for (int i = 0;i < n;i++)
{
cout << ' ' << *myarry[i];
}
cout << endl;
/*for (auto i : myarry)
{
cout << i;
}*/
}
void main()
{
array<int,10> intarry = { 1,2,3,4,5,6,7,8,9,10};
array<int*, 10> pintarry;
array<int**, 10> ppintarry;
for (int i = 0;i <intarry.size();i++)
{
pintarry[i]=&intarry[i];
}
for (int i = 0;i <intarry.size();i++)
{
ppintarry[i] = &pintarry[i];
}
showarray(intarry,10);//根据类型选择函数模板
showarray(pintarry, 10);
showarray(ppintarry,10);
std::cin.get();
}