gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:10:13 25 4
gpt4 key购买 nike

我正在使用一个库函数,该函数在某些时候需要一个指针数组 (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);

关于c++ - C/C++ 指针数组的内联强制转换(void**),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58558463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com