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

时间:2013-02-11 22:43:42

标签: c++ arrays macros inline

我已经写了一段时间的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;
}

但我不认为我会打扰......

1 个答案:

答案 0 :(得分:1)

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

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