【发布时间】:2019-10-25 12:22:13
【问题描述】:
我正在使用一个库函数,它在某些时候需要一个指针数组 (void**),它或多或少像这样工作。
void* args[] = { &var_a, &var_b, &var_c, ... };
someFunction(args);
使用一次后,我想再次调用同一个函数,所以我要做的是创建另一个变量,例如:
void* args_2[] = { &var_d, &var_e, &var_f, ... };
someFunction(args_2);
等等……
我想找到一种回收args符号的方法,这样我就不必每次调用它时都执行args_2、args_3、args_4;但是当我尝试重新分配它时:
args = { &var_d, &var_e, &var_f, ... };
我得到以下信息:
error: assigning to an array from an initializer list
我理解错误,但我不知道如何避免它或将这个东西强制转换为预期的指针数组类型。
我知道它们是两种不同的语言,但我正在寻找一种适用于 C 和 C++ 的解决方案。
【问题讨论】:
-
C 还是 C++?有区别。
-
我可以接受在这两种情况下都适用的答案。另外,@NathanOliver 你能告诉我更多关于有什么不同的地方吗?
-
使用
std::vector<void *>,它确实支持从初始化列表构造。用作someFunction(args.data()); -
如果你想要 C 或 C++ 的解决方案,我建议提出两个单独的问题,因为解决方案本质上是不同的(C 可以做 C++ 不能做的事情,反之亦然)。如果您不在乎,那么我建议您只使用一种语言。如果你必须掷骰子,但我建议使用 C++,因为你可以简单地使用 std::vector
-
@almosnow 好吧,不,这是一个神话。 kiran 的答案是仅限 C,而我的答案是仅限 C++(即使您使用
typedef)。现在呢?
标签: c++ c initializer-list coercion