C++の場合も調べてみた
まず前提条件として
#include <stdarg.h>
か
#include <cstdarg>
をしておく
以下引数中の中の最大値を返す関数
double max(int num, ...){
va_list args;
double ival;
va_start(args, num);
double result = -DBL_MAX;
for(int i=0; i<num; i++){
ival = va_arg(args, double);
if(result < ival){
result = ival;
}
}
va_end(args);
return result;
}
まずJavaと違う点として、第一引数は明示しなければいけない
この例だとint numの部分がそれ
可変引数の数をとれない?のか難しいらしいので、第一引数に引数の数を入れるのが普通らしい
可変引数の型は引数中に無いですね
ival = va_arg(args, double);
という行のdoubleの部分でdoubleだと決まります。
int 型のmax関数を作りたければ、
ival = va_arg(args, int);
にしてやればいいわけです
va_listとかva_startとかva_endとかはテンプレでOK

0 件のコメント:
コメントを投稿