猿问

这不是“我想让它能让任意大小的数组都可以使用”的目的。要如何才能达到这个目的呢?

C++一般是不允许数组作为函数形参,它会悄悄把数组形参转化为指针,因此,我们在写这些函数的时候,往往要多加一个size参数,表示数组的大小,如:
void func(int arr[], int size);

但是一种情况例外,那就是数组引用作为函数形参:
void func(int (&arr)[10]);

但这样做有个很大的缺陷,就是只能用固定大小的数组,而我想让它能让任意大小的数组都可以使用。于是我想,用模板:
template <int size>
void func(int (&arr)[size]);

但是,编译通不过,说是不能引用zero size的数组。于是我用改用带默认值的class模板:
template <int size = 10>
class Array{
public:
void func(int (&arr)[size]);
};
依旧是同样的错误,那我只好用全局变量:
static int size = 10;
void func(int (&arr)[size]);

慕容3067478
浏览 124回答 2
2回答

森栏

你的template写法不对用模板类的做法是最好的,写法如下:template <typename T>class Array&nbsp;{public: Array(int isize = 0) : size(isize){if (size == 0)data = NULL;elsedata = new T[size];};~Array(){if(data) delete [] data;&nbsp;};int GetSize() {return size;}private: int size;T *data;}上面这个类就可以直接把他的引用或者指针传到函数里如void func(Array &arr);在函数内部可以用arr.GetSize()来取得其长度。

繁华开满天机

你可以换一个思路,传送整个vector比如有个 vector v;你可以定义一个函数 这样写int getXX(vector &z){...}这样使用函数getXX(v);
随时随地看视频慕课网APP
我要回答