可以c++数组类作为参数传递与可变大小?



我知道一个常规的内置数组可以传递给一个变量大小的函数。然而,是否有一个好的技术,能够编写一个函数,接受一个数组类对象的引用,但大小可以是可变的?

是否有模板技术来做到这一点?还是直接用向量?

谢谢!

~ G

更新:
澄清-我说的是<array>库中的std::array类。当你创建一个类的实例时,它有两个模板参数:array<type, size>.

我知道一个普通的内置数组可以传递给一个大小可变的函数。

不,不能。它只能通过指针或引用传递。在按指针的情况下,所有的大小信息都会丢失。在按引用的情况下,大小必须在形参本身中作为其类型的一部分显式声明,因此不能将不同大小的单独数组传递给同一个函数。

然而,是否有一种好的技术能够编写一个函数,接受数组类对象引用,但大小可以是可变的?

是的,使用模板的大小,例如:

template<typename T, size_t N>
void doSomething(T (&arr)[N])
{
// use arr up to N elements as needed...
}
int arr1[5];
doSomething(arr1);
char arr2[10];
doSomething(arr2);
...

std::array的情况下,模板方法仍然有效,例如:

template<typename T, size_t N>
void doSomething(std::array<T, N> &arr) {
// use arr up to N elements as needed...
}
std::array<int, 5> arr1;
doSomething(arr1);
std::array<char, 10> arr2;
doSomething(arr2);
...

是否有这样做的模板技术?

是的。技巧是:使用模板。

的例子:

template<class Array>
void function(const Array&);

注意模板是编译时的实体,在运行时不能改变大小。

还是直接用向量?

对于有运行时间限制的数组:Yes.

最新更新