C++模板类内二维数组引用初始化的问题
//一维数组的引用传递
#include <iostream>
#include<string>
using namespace std;
template<class T,int size>
void Print(const T (&a)[size])
{
for(int i=0;i<sizeof(a)/sizeof(T);++i)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
int main()
{
string ab[] = {"a1","a2","a3","a4","a5","a6"};
Print<string>(ab);
return 0;
}
输出
a1 a2 a3 a4 a5 a6
问题一: 二维数组的引用传递这么写?请牛人指教。
//错误写法
#include <iostream>
#include<string>
using namespace std;
template<class T,int size>
void Print(const T (&a)[][size])
{
for(int i=0;i<sizeof(a)/sizeof(T);++i)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
int main()
{
string ab[][3] = {"a1","a2","a3","a4","a5","a6"};
Print<string>(ab);
return 0;
}
问题二: 模板类中的 一维数组的引用的大小 能不能根据“参数”动态决定??(类似于第一个代码例子那样)。 即
#include <iostream>
#include<string>
using namespace std;
template<class T,int size>
class ArrayProxy
{
private:
T (&a)[size];
public:
ArrayProxy(T (&va)[size]):a(va){}
void Print()
{
for(int i =0; i<sizeof(a)/sizeof(T);++i)
{
cout<<a[i]<<" ";
}
}
};
int main()
{
string ab[6] = {"b1","b2","b3","b4","b5","b6"};
ArrayProxy<string,6> ap(ab);
//问题二:
//这里为什么不是ArrayProxy<string> ap(ab)这么写,根据传入的参数ab.然后判断size的大小,而非自己计算传进去。 (类似于第一个代码例子那样)
ap.Print();
return 0;
}
金仴靈金仴靈
11 years, 4 months ago