微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++ Array 类可以作为可变大小的参数传递吗?

如何解决C++ Array 类可以作为可变大小的参数传递吗?

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

是否有用于执行此操作的模板技术?还是我们只用向量代替?

谢谢!

~G

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

解决方法

我知道可以将常规的内置数组传递给大小可变的函数。

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

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

是的,使用尺寸模板,例如:

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);

...

UPDATE:在 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&);

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

或者我们只是使用向量代替?

对于运行时绑定的数组:是。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。