C/C++指针数组的内联强制(void**)



我使用的是一个库函数,它在某个时刻需要一个指针数组(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++的解决方案。

如果只需要一次调用someFunction,为什么要使用局部变量?

using args = void *[];
someFunction(args{&a, &b});
someFunction(args{&a, &b, &c});

或者,C++用一个包装器将其进一步简化:

template <class... T>
decltype(auto) someFunction(T *... args) {
void *args_[] { args... };
return someFunction(args_);
}
someFunction(&a, &b);
someFunction(&a, &b, &c);

您可以使用下面的带指针到指针的复合文字。

void** args = (void *[]){ &var_a, &var_b, &var_c, ... };
args = (void *[]){ &var_d, &var_e, &var_f, ... };

最新更新