我有这样的功能:
void foo(int count, ...)
{
va_list args;
va_start(args, count);
// Do Somethings...
va_end(args);
}
我想将数组元素作为参数传递给foo
函数,如下所示:
void bar(int n, int array[])
{
// I want to pass array elements as parameter like this:
foo(n, array[0], array[1], array[2], array[3], ..... array[n]);
}
使用bar
功能:
int main()
{
bar(7, std::initializer_list<int>({ 0, 1, 2, 3, 4, 5, 6 }));
return 0;
}
我该怎么办?谢谢!
答案 0 :(得分:2)
如果你知道编译时的数组值是什么,你可以使用std::index_sequences
和一些模板机制在C ++中做到这一点。
作为一个最小的工作示例:
#include<functional>
#include<iostream>
template<typename... Args>
void foo(std::size_t count, Args... args) {
int _[] = { 0, (std::cout << args << std::endl, 0)... };
(void)_;
}
template<std::size_t N, std::size_t... I, typename T>
void bar(std::index_sequence<I...>, T(&array)[N]) {
foo(N, array[I]...);
}
template<std::size_t N, typename T>
void bar(T(&array)[N]) {
bar(std::make_index_sequence<N>{}, array);
}
int main() {
int array[] = { 0, 1, 2, 3, 4, 5, 6 };
bar(array);
}
我认为array
是一个数组而不是std::initializer_list
。在这一点上,这个问题有点令人困惑。
请注意,以下代码也可以使用以下代码:
void foo(std::size_t count, ...) {
va_list args;
va_start(args, count);
// do something...
va_end(args);
}