可変個引数関数でデフォルトのパラメーターを指定する方法はありますか?(テンプレートにも適用されます)
4 に答える
C ++では、可変個引数関数を名前付きパラメーターイディオムに基づく関数に置き換えることができます。
C++のFAQ項目10.20を参照してください。「名前付きパラメータイディオム」とは何ですか。。
これにより、デフォルトの機能と便利な表記が提供されます。
乾杯&hth。、
可変個引数とデフォルトの両方のパラメーターが必要なのはなぜですか?
例えば、
myFunc(int a=5, int b=5, int c=5);
デフォルト値で0〜3個のパラメータを受け取ることができ、
myFunc(...)
任意の数のパラメーターを受け取ることができます。関数内で、欠落しているパラメーターをチェックし、必要に応じてデフォルト値を入力できます。
最初にC++の答え。
デフォルトのパラメーターは、関数が提供されたとおりに表示される必要があること、および表示されるパラメーターです。したがって、これらのパラメータに明確な名前を付けてから、デフォルトの引数を指定する必要があります。これは、関数の「短い」バージョンになります。
これらのデフォルトの引数に加えて、引数リストを使用できるようにしたい場合は、va_arg
これを正確に実行する2番目のバージョンで関数をオーバーロードするだけです。その「長い」バージョンでは、とにかくすべての引数を指定する必要があるため、ここでデフォルトの引数を使用しても意味がありません。
今Cの答え
おそらくあなたはそのようなことを調べていませんでしたが、C99のva_arg
マクロ機能を使用すると、Cの関数のデフォルトの引数を定義することもできます。その場合、マクロ構文は、関数呼び出しの最後だけでなく途中でも引数を省略できるという点で、C++の場合よりも寛容です。したがって、関数を次のように宣言したとしたら
int toto(int a, ...)
位置2と3にデフォルトの引数を指定します。たとえば、次のように呼び出すことができます。
toto(4,5,,,37);
したがって、この意味でCでは、要求したことを実行できます。私は個人的にこれをすることを確かに躊躇します。
いいえ、それを行う方法はありません。