2010-12-27 12 views
2

私はこれをどうやってできるのだろうと思っていました。私はNの引数の一部で、ほとんど困惑してる:自分のprintf関数を作成しますか?

printf("Hello, I'm %i years old and my mom is %i .",me.age(),mom.age()); 

私はこのようなフォーマットされた文字列を取るとstd文字列を返す関数を作りたいです。

N引数の部分はどのように処理されますか?

答えて

10

printfは可変性の機能である。 <stdarg.h>によって提供される機能を使用して、独自の可変関数を実装することができます。

C++では、可能な限り可変の関数を避ける必要があります。それらは引数として受け入れることができる型が非常に限定されており、型の安全ではありません。 C++ 0xはC++にバリデーショナルテンプレートを追加します。いったんこの機能のサポートが普及すれば、タイプセーフな可変関数を書くことができます。

一方、他のタイプセーフな方法を使用することをお勧めします。たとえば、Boost.Formatは、%オペレータに過負荷をかけてフォーマットを実行します。

+0

@James McNellis:なぜvariadicが制限されていますか?唯一の制限はスタックサイズだと私は思う。あなたは、それが正しいと解釈される限り、あらゆるタイプを使用することができます。 –

+0

@Edwinでは、ユーザー定義の構造体を渡すことができないという点で制限があります。 (例:std :: stringを渡します)。 –

+0

@Edwin:とりわけ、可変引数packで渡される引数はすべてPODでなければなりません。 –

関連する問題