5

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

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

我可以用它来调用它,avg(4,2,3,9,4);它工作正常。它需要维护此功能。

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

avg(4,myArray[5])这样该功能avg没有任何区别?

4

3 回答 3

5

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

于 2013-08-14T11:14:39.260 回答
4
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...);
}
于 2013-08-14T11:26:29.563 回答
2

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

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

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

于 2013-08-14T11:15:28.557 回答