为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
慕容3067478 2023-04-01 17:13:45
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]);
查看完整描述

2 回答

?
森栏

TA贡献1810条经验 获得超5个赞

你的template写法不对

用模板类的做法是最好的,写法如下:

template <typename T>

class Array 
{
public: Array(int isize = 0) : size(isize)
{
if (size == 0)
data = NULL;
else
data = new T[size];
};
~Array()
{
if(data) delete [] data; 
};
int GetSize() {return size;}
private: int size;
T *data;
}

上面这个类就可以直接把他的引用或者指针传到函数里


void func(Array &arr);

在函数内部可以用arr.GetSize()来取得其长度。

查看完整回答
反对 回复 2023-04-03
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

你可以换一个思路,传送整个vector
比如有个 vector v;
你可以定义一个函数 这样写
int getXX(vector &z){...}

这样使用函数
getXX(v);

查看完整回答
反对 回复 2023-04-03
  • 2 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信