如何将值列表传递给期望数组的函数?

时间:2015-02-11 02:02:05

标签: c++ arrays visual-studio-2012 initializer-list

在我的程序中,我想将一些变量传递给一个函数,并让该函数运行for循环以将数据写入控制台。

这是我的代码:

void WriteValue(int[] arr)
{
    for(auto c : arr)
        std::cout<<arr<<std::endl;
}

int main() 
{
    int a = 0;
    int b = 1;
    int c = 3;

    WriteValue(a,b,c);

    return 0;
}

我知道这可以在C#中使用params,但我没有那个选项。如何让它在C ++中运行?

1 个答案:

答案 0 :(得分:3)

这是一种非常简单灵活的方式:

#include <iostream>

template<typename T>
void WriteValue(const T& arr)
{
    for(auto c : arr)
        std::cout << c << std::endl;
}

int main() 
{
    int a = 0;
    int b = 1;
    int c = 3;

    WriteValue(std::array<int, 3>{a,b,c});
    // nicer C99 way: WriteValue((int[]){a,b,c});

    return 0;
}

如果你只想传递一个int列表(并且它必须是一个以大括号分隔的列表,而不是一个现有的数组),你可以改为

#include <iostream>
#include <initializer_list>

void WriteValue(const std::initializer_list<int>& arr)
{
    for(auto c : arr)
        std::cout << c << std::endl;
}

int main() 
{
    int a = 0;
    int b = 1;
    int c = 3;

    WriteValue({a,b,c});

    return 0;
}

不幸的是,VS2012 doesn't support this.您可以升级到Visual 2013(Express Edition和Community Edition都是免费的),或者您可以使用辅助变量:

#include <iostream>

template<typename T>
void WriteValue(const T& arr)
{
    for(auto c : arr)
        std::cout << c << std::endl;
}

int main() 
{
    int a = 0;
    int b = 1;
    int c = 3;

    int args[] = { a, b, c };
    WriteValue(args);

    return 0;
}