这里是一个非常简单和灵活的方式:
#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;
}
如果你只希望能够通过INTS的列表(和它必须是一个括号分隔的列表,而不是现有的阵列)您可以改为做
#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(易捷版和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;
}
我在这里看不到任何'unsigned'类型。你正在寻找一个可变参数函数,或者'std :: initializer_list'? –
2015-02-11 02:03:34
只是你知道,声明遵循use,所以它会是'int * arr'或'int arr []',但是你不能使用ranged-for,因为一个指针不带有它的大小。你想发送'c'到'cout',而不是'arr'。 – 2015-02-11 02:09:01
@BenVoigt很高兴知道。尽管如此,我并不担心for循环。我只是需要一些东西来测试它。我更关心将我的价值观传递给我的功能。 – SyntaxIsEvil 2015-02-11 02:34:27