可変個引数の関数の引数を、別の関数に渡すには?

解決


いな  2006-04-25 23:43:54  No: 61408

お世話になります。
VC++6.0/Xpで開発しております。

可変個数引数の関数が貰った引数を、更にそのまま
可変個数引数の関数に渡すことは可能なのでしょうか?

void func1(char * pdata, ...)
void func2(char * pbuf, ...)

という二つの関数があり、func1の中で、func2を呼び出したいのですが
func2の可変引数...は、func1の可変引数...を、そのまま渡したいのです。
方法をご存知の方がいらっしゃいましたら
ご指示願います。
宜しくお願いいたします。


YuO  2006-04-26 00:07:00  No: 61409

アセンブラでガリガリ書けばできないこともないですが……。
C / C++の範囲内で,となるとできません。
vsprintfのように,va_listを引数とするfunc2代替関数を用意しましょう。


いな  2006-04-26 00:21:06  No: 61410

お早いご回答頂きまして有難うございます。
何かしら簡単に出来る方法があるのでは。と思っていたの
ですが、鬱陶しいロジックになるようですね。
有難うございました。
別の方法を考えてみます。


kure  2006-04-26 01:43:42  No: 61411

もう解決チェック済みですが。。。

> 鬱陶しいロジック

最初の関数が可変引数でもらう以上
どうあがいてもva_listを使わざるを得ないです。
そうなれば次の関数にva_listを渡すのも
最初の関数でva_listを使うのと変わらないのではないでしょうか。

> 別の方法

C++であればstd::vectorとかstd::listなどの
コンテナをそのまま渡せば実質的には
可変長引数を渡すのと変わりません。
しかも型を固定できるのでva_listみたいに
型情報を第一引数に渡す必要もありません。
ただし、型を固定されると困るのであれば
voidポインタを使ってキャストしまくるとか
VARIANTのような複数の型を許容するクラスを
作って対応することになりますが・・・。


いな  2006-05-11 19:36:34  No: 61412

すいません。
回答下さっているとは、気がつきませんでした。
有難うございます。
実は、まだ解決出来ていなかったりしております。
va_listを引数にして、試してみようと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加