【问题标题】:How to pass array elements as parameter in function in C++?如何在 C++ 函数中将数组元素作为参数传递?
【发布时间】:2017-01-28 13:52:19
【问题描述】:

我有这样的功能:

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;
}

我该怎么做?谢谢!

【问题讨论】:

标签: c++ arrays function parameters variadic-functions


【解决方案1】:

如果您知道编译时的数组值是什么,您可以使用 std::index_sequences 和一些模板机制在 C++14 中执行此操作。
作为一个最小的工作示例:

#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);
}

【讨论】:

    猜你喜欢
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2010-10-01
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多