gpt4 book ai didi

C++ 将数组及其长度传递给函数(使用宏/内联函数?)

转载 作者:太空宇宙 更新时间:2023-11-04 11:59:15 25 4
gpt4 key购买 nike

我已经写了一段时间的 C++(很长一段时间的 java/C),我想知道是否有一个我不知道的技巧可以帮助我完成以下操作。

vector<unsigned char> *fromArray(unsigned char data[], int length)
{
vector<unsigned char> *ret = new vector<unsigned char >();
while (length--)
{
ret->push_back(*data);
}
return ret;
}

你可以像这样使用它:

unsigned char tmp[] = {0, 1, 2, 3, 4, 5};
vector<unsigned char> *a = fromArray(tmp, sizeof(tmp));
// use `a' here

我觉得这很麻烦 - 我想把它全部写在一行上

vector<unsigned char> *a = fromArray({0, 1, 2, 3, 4, 5});
// use `a' here

这样的事情可能吗?不幸的是,我无法访问 C++11(看起来它的 initializer_list 正是我想要的)。

编辑

抱歉,我在这里的一些基本知识是错误的。我现在将避免扩展 std::vector。但是我认为这个问题仍然有效,只是我的例子不好。

** 可能的解决方法 **

可以定义一堆重载函数来接受不同数量的参数,例如

vector<unsigned char> *fromArray(unsigned char a)
{
vector<unsigned char> *ret = new vector<unsigned char >();
ret->push_back(a);
return ret;
}

vector<unsigned char> *fromArray(unsigned char a, unsigned char b)
{
vector<unsigned char> *ret = new vector<unsigned char >();
ret->push_back(a);
ret->push_back(b);
return ret;
}

但我想我不会打扰...

最佳答案

您可以使用模板来推断任何固定大小数组的大小:

template< class T, size_t N >
auto_ptr<ByteArray> foo( T (&data)[N] )
{
return auto_ptr<ByteArray>(new ByteArray(data, N));
}

然后

unsigned char tmp[] = {0, 1, 2, 3, 4, 5};
auto_ptr<ByteArray> a = foo(tmp);

但请记住 auto_ptr 已弃用。首选 unique_ptr。另外请注意,您不应公开继承 std::vector

关于C++ 将数组及其长度传递给函数(使用宏/内联函数?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14822314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com