4

可変数の引数を取る関数を作成する必要があります。これは基本的に、snprintf同様の関数のラッパーです。の周りに可変数の引数を渡すに示されているように、これを一般的に行う方法を理解しています。

ただし、少なくともCでは、変数引数が開始する前に1つの名前付きパラメーターを関数に渡す必要があるように見えます(Cでvoid f(...)が許可されないのはなぜですか?)。

ただし、同じ質問に対する回答は、これはC++で簡単に可能であると述べています。特にvararg関数の処理方法はCva_startなど)と同じように見えるので、これをどのように実現するのか疑問に思いました。それとも、可変個引数テンプレートを参照していますか?

それで、基本的に、以下に示すように、名前付き引数なしで可変個引数関数を書くことは可能ですか?もしそうなら、どのように?

void f(...){
   ... 
}

ps可能であれば、c++03でこれを実行したいと思います。

4

1 に答える 1

4

C ++言語では、パラメーターリストが。のみで構成される関数を記述できますが、パラメーターリスト...で宣言された関数の引数にアクセスする手段はありません(...)

基本的に、C ++のこのような関数は、過負荷解決での動作のために存在します(...パラメーターは任意のパラメータータイプと一致します)。このような関数の本体は、引数にアクセスできません。そのような機能の使用法が見当たらない場合は、使用しないでください。

このような関数は、よく知られているテンプレートメタプログラミング手法の非実行コンテキストでよく使用されます。この場合、関数を定義する必要はありません。単なる宣言で十分です。

于 2012-12-14T01:59:31.427 に答える