【cocos2d-x】可変長引数を取り可変長引数を渡す

以前、可変長引数を取る関数についてと言うエントリを書きました。

さて、そういう関数を作ったは良いけど、渡って来た引数を、他の可変長引数を取る関数にそのまま渡したい場合にはどうすれば良いのでしょうか?

例えば、CCLOGやvprintf等の関数をラップする場合等です。

// HelloWorld.h
void log(const char * format,...);

// HelloWorldc.cpp
void HelloWorld::log(const char *format...)
{
    // CCLOGにこのformatと引数達を渡したい・・・。
}

まさか、渡って来た引数の個数を調べてその個数に応じて引き渡し先の関数を呼ぶ訳にもいきません。

結論この様な形になります。

void HelloWorld::log(const char *format...)
{
    va_list args;
    va_start(args, format);
    vprintf(format, args);
    va_end(args);
}

簡単ですね。

va_list型の変数を用意し、それをformatで初期化する。
そして、vprintfに可変長引数とformatを渡してあげる。

以上です。

使用例はこちら。

 this->log("これは%sです。", "みかん");

出力

これはみかんです。

型の違う引数も取る事が出来ます。

 this->log("これは%sで%d円です。", "みかん", 150);

出力

これはみかんで150円です。

誰かのお役に立てば。

このブログのcocos記事一覧

コメント

タイトルとURLをコピーしました