我已经写了一段时间的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;
}
但我不认为我会打扰......
答案 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
。