1
zzxxisme 2021-08-30 18:21:44 +08:00 via Android
这个问题问得不知道怎么回答,因为描述不清楚,可以有很多种理解,例如是把整个 list 当做一个参数传给函数,还是把 list 的每个元素拿出来传给函数的每个参数?你的 list 和函数的签名是怎样的?最好能给段代码来表明你要做的事情,还有你做过什么样的尝试,这些尝试有什么问题。
|
2
xylophone21 2021-08-30 18:22:44 +08:00
依稀记得多年前是用汇编搞定的
|
3
encounter2017 2021-08-30 18:38:43 +08:00
|
4
christopheredwar 2021-08-30 18:39:25 +08:00
是 Python 麽?*args 接住传进来的 list,然后正常解析
|
5
ysc3839 2021-08-30 18:41:41 +08:00
如果你说的是 parameter pack https://en.cppreference.com/w/cpp/language/parameter_pack#Pack_expansion
那应该是不行的,因为这是编译期就确定长度的。 如果你说的是 C 的 variadic arguments https://en.cppreference.com/w/c/language/variadic 那符合 C 标准的方法是没有的,但是有在某些平台或编译器下的方法,比如 gcc 可以用 __builtin_apply https://stackoverflow.com/a/23789807/6911112 |
6
iceheart 2021-08-30 20:39:07 +08:00 via Android
同意二楼,除了汇编,没想出别的办法
|
7
oneisall8955 2021-08-30 20:50:07 +08:00 via Android
不了解 c++,JAVA 里面可以用数组传给可变参数
|
8
ipwx 2021-08-30 21:16:45 +08:00
我觉得这是个 XY problem 。
楼主你能不能把你的原始需求说一说,C++ 不会这么思考问题的。 |
9
zzxxisme 2021-08-30 22:18:28 +08:00 1
看了其他人的理解,我觉得问题是把一个 list 的所有元素传到一个函数的参数列表,而函数的参数列表是 C 的可变参数。我想的是,既然是传给函数作为参数,list 的长度(也就是参数的数目)应该假设不会很多,于是可以假设一个最大 list 长度。如果是利用 C++,可以写一个模板函数,通过递归的方法一下下把每个元素取出来并用 parameter pack 存着,把所有都拿到之后,然后传给带可变参数的函数。像 5 楼说的,用 parameter pack 要在编译期间确定长度,这个长度就是前面说的最大 list 长度。
然后试着写了一下: https://gist.github.com/zzxx-husky/40a42457c01b86f388974a14278dc78e |
10
imKiva 2021-08-31 16:53:08 +08:00 via iPhone
这个问题感觉最方便的办法是用 libffi,之前遇到同样问题的时候想了很久,因为需要支持多种 arch,所以最后选择了 libffi
|
11
liuidetmks 2021-09-01 06:37:56 +08:00 via iPhone
我来个粗暴的,封装一个函数,接受数组参数。
在里面根据数组个数,再来手动调用 原函数。 switch 30 个 case,应该够了吧 你的函数总不至于有几百上千个参数一次传入吧 |