c ++传递数组而不是可变长度参数列表

时间:2013-08-14 11:12:04

标签: c++ arrays variadic-functions

所以我有一个带有可变长度参数列表的函数,例如:

int avg(int count,...){
    //stuff
}

我可以用avg(4,2,3,9,4);调用它,它运行正常。它需要保持这种功能。

我有没有办法用数组调用它而不是列出变量?例如:

avg(4,myArray[5])这样功能avg没有看到任何差异?

3 个答案:

答案 0 :(得分:4)

不,没有这样的方法。但是,您可以创建两个函数,一个采用可变数量的参数,另一个采用数组(或者更好的是std::vector)。第一个函数只是将参数打包到数组(或向量)中并调用第二个函数。

答案 1 :(得分:3)

void f() {}

template<typename T, std::size_t N>
void f(T array[N])
{
}

template<typename T, typename... Args>
void f(const T& value, const Args&... args)
{
    process(value);
    f(args...);
}

答案 2 :(得分:2)

没有。由于指针本质上是无符号整数,因此无法区分内存地址和无符号整数。或者(我确信你想避免),你必须这样做:

avg( 4, myArray[ 0 ], ..., myArray[ 3 ] );

...其中...位于myArray位置1和2 如果您想要使用与上一个函数相同的参数。还有其他方法可以做到这一点,例如使用C ++向量。