C ++函数具有无限的可选参数和不同的输入变量选择

时间:2013-12-23 05:10:27

标签: c++ function optional-parameters

暂时考虑过这些问题但是却无法想出如何做到这一点。

让我说我的功能如下:

double sum( int param1 , double param2 , [ optional... ] )
{
     return param1 + param2;
}

现在我想要

Q1:可选参数

Q2:无限量的可选参数,无需全部声明它们。

问题3:在这些可选参数中使用int和double值

提前致谢:)

2 个答案:

答案 0 :(得分:2)

如果您熟悉c++11,则会引入一个名为variadic templates的新概念;从本质上讲,它可以让你创造出你所提到的功能,这可以带来各种各样的争论。

声明此类函数的语法如下:

template <typename ... Types>
void someFunc(Types ...args) {}

另一种选择是使用std::initializer_liststd::accumulate来实现此目的,因为您已经知道将要使用的变量类型。使用您的程序的一个例子是:

#include <iostream>
#include <initializer_list>
#include <numeric>
using namespace std;

double sum( initializer_list<double> vals ) {

    return accumulate(vals.begin(), vals.end(), 0.0);
}

int main() {
    // your code goes here
    cout << sum({2, 3, 4.6, 5, 6, 74.322, 1}) << endl;
    return 0;
}

答案 1 :(得分:0)

您想使用Variadic function

这里显示的一个例子很容易理解,它将计算任意数量的参数的平均值。请注意,该函数不知道参数的数量或类型。

#include <stdarg.h>

double average(int count, ...)
{
    va_list ap;
    int j;
    double tot = 0;
    va_start(ap, count); /* Requires the last fixed parameter (to get the address) */
    for(j = 0; j < count; j++)
        tot += va_arg(ap, double); /* Increments ap to the next argument. */
    va_end(ap);
    return tot / count;
}