C++:如何将 N 参数传递给 N 可以是 0 >任意数字的函数?(该函数已作为外部库的一部分存在)



这是我目前调用函数的方式:

struct fann *ann = fann_create_standard(
                          num_layers, 
                          num_in,
                          optional_num_1, 
                          optional_num_2, 
                          num_out);

上面的函数可以有至少3个参数…所需的参数是num_layers、num_input和num_output)

可选参数是神经网络的隐藏层(它们叫什么并不重要....)但基本上……它可以像这样:

fann_create_standard(#layers, 
                       #input,
                       #hidden1,
                       #hidden2,
                       #hidden3,
                       #hidden4,
                       ...,
                       #hiddenN,
                       #output);

我想要做的是,传入命令行参数来改变多少层,以及每个隐藏层的值是什么(这个函数调用中的中间参数),这样我就不必每次重新配置网络时都重新编译程序。

你不能使用fann_create_standard_array做你想要的吗?数组可以动态创建,而参数列表应该在编译期间指定。

将stdarg.h库文件添加到程序中。

在你的例子中你的函数定义将是:

fann_create_standard(num_layers , num_in , num_out , int count,  ... );

然后,您可以使用va_start、va_args、va_end宏和va_list类型访问可选参数以检索可选参数。新的"count"形参保存了传递给该方法的形参的数量,因此:

fann_create_standard(num_layers , num_in , num_out , int count,  ... ){
  int i;
  YOUR_TYPE val;
  va_list vl;
  va_start(vl,count);
  for (i=0;i<count;i++)
  {
    val = va_arg(vl,YOUR_TYPE);
    //val is your optional parameter, do whatever you'd like with it
  }
  va_end(vl);
}

你要找的是一个可变函数

最新更新