#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
template<class T, int N>
T sum(T b,T e, T init=T())
{
char chars[N];
cout<<"N: "<<N<<endl;
init=b+e;
return init;
}
template<class T>
T sum(T b,T e, T init=T())
{
cout<<"T sum(T b,T e, T init=T())"<<endl;
init=b+e;
return init;
}
int sum(int b,int e, int init=int())
{
cout<<"int sum(int b,int e, int init=int())"<<endl;
init=b+e;
return init;
}
int main(){
string str=string();
int x;
x=10;
string a[]={"a","b","e"};
int b[]={1,2,3};
//cout<<sum<string,x>(a[0],a[1],a[2])<<endl;//error C2971: “sum”: 模板参数“N”: “x”: 局部变量不能用作非类型参数
cout<<sum<string,10>(a[0],a[1],a[2])<<endl;
cout<<sum<int,100>(b[0],b[1],b[2])<<endl;
cout<<sum(a[0],a[1],a[2])<<endl;
cout<<sum(b[0],b[1],b[2])<<endl;
cout<<sum<string>(a[0],a[1],a[2])<<endl;
cout<<sum(b[0],b[1])<<endl;
getchar();
}
输出结果:
N: 10
ab
N: 100
3
T sum(T b,T e, T init=T())
ab
int sum(int b,int e, int init=int())
3
T sum(T b,T e, T init=T())
ab
int sum(int b,int e, int init=int())
3
函数模板不能够带默认参数。
函数模板可以不用指明参数值。
这里还有一个有趣的地方就是init形参=T()。
无类型模板参数不能为变量。必须是一个编译时就已知的。
string str=string();
C++中,这种初始化的方法都差点忘了。
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
template<class T, int N>
T sum(T b,T e, T init=T())
{
char chars[N];
cout<<"N: "<<N<<endl;
init=b+e;
return init;
}
template<class T>
T sum(T b,T e, T init=T())
{
cout<<"T sum(T b,T e, T init=T())"<<endl;
init=b+e;
return init;
}
int sum(int b,int e, int init=int())
{
cout<<"int sum(int b,int e, int init=int())"<<endl;
init=b+e;
return init;
}
int main(){
string str=string();
int x;
x=10;
string a[]={"a","b","e"};
int b[]={1,2,3};
//cout<<sum<string,x>(a[0],a[1],a[2])<<endl;//error C2971: “sum”: 模板参数“N”: “x”: 局部变量不能用作非类型参数
cout<<sum<string,10>(a[0],a[1],a[2])<<endl;
cout<<sum<int,100>(b[0],b[1],b[2])<<endl;
cout<<sum(a[0],a[1],a[2])<<endl;
cout<<sum(b[0],b[1],b[2])<<endl;
cout<<sum<string>(a[0],a[1],a[2])<<endl;
cout<<sum(b[0],b[1])<<endl;
getchar();
}
输出结果:
N: 10
ab
N: 100
3
T sum(T b,T e, T init=T())
ab
int sum(int b,int e, int init=int())
3
T sum(T b,T e, T init=T())
ab
int sum(int b,int e, int init=int())
3
函数模板不能够带默认参数。
函数模板可以不用指明参数值。
这里还有一个有趣的地方就是init形参=T()。
无类型模板参数不能为变量。必须是一个编译时就已知的。
string str=string();
C++中,这种初始化的方法都差点忘了。