我正在尝试向函数传递一个Data*
指针数组。
void f(int argc, Data** argv) {
...
}
// at this point, I have Data* x, Data* y initialized
f(2, {x, y});
有没有办法让这样的代码运行,数组定义在函数调用内部?现在,返回的错误是
closure3.cc:15:8: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
closure3.cc:15:16: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘Data**’ for argument ‘2’ to ‘void f(int, Data**)’
有没有办法让数组实例化内联,是否可以在没有C ++ 0x的情况下执行此操作?提前致谢。
答案 0 :(得分:4)
您可能需要考虑使用可变长度参数,这样就不必在内联实例化列表。
答案 1 :(得分:0)
大括号初始值设定项仅在声明数组变量时可用。所以你不能这样做。
从技术上讲,你可以用一个函数来做(注意:这是未经测试的)
Data ** pair_of_data(Data * x, Data * y)
{
Data ** result = new Data*[2];
result[0] = x;
result[1] = y;
return result;
}
但由于以下几个原因,这很难看:
如果您特别需要传递对,请考虑使用std::pair
。这些可以使用std::make_pair
内联创建。</ p>
但最后,使用STL容器或在调用函数之前声明数组变量可能更容易,因此您可以使用聚合初始化。或者添加-std=c++0x
标志。
答案 2 :(得分:-1)
如果你真的想要它没有C ++ 11的功能,你可能会尝试这样做(不是很好的代码,只是为了表明这个想法):
vector<int> InitList(int first, ...)
{
vector<int> arr;
int *p = &first;
while(*(p + 1))
{
arr.push_back(*p);
p++;
}
return arr;
}
int main()
{
F(2, InitList(1, 2, 3));
}