No.17768![]() |
動的変数について教えてください 投稿者---初心者(2004/11/04 11:54:18) |
||
はじめまして。 ただいま、困っております。 動的変数を持つ関数内から、その引数をそのまま、他の動的変数を持つ 関数を呼ぶ!ということが可能なのでしょうか? 関数1を呼び出したら、その引数を関数1の中で関数2に渡したいのです。 関数1( const char* aString, ... ); 関数2( int aSize, const char* aString aString, ... ); ご存知の方がおられましたら御教授ください。 |
No.17769![]() |
Re:動的変数について教えてください 投稿者---nop(2004/11/04 12:24:42) |
||
>動的変数を持つ関数内から、その引数をそのまま、他の動的変数を持つ >関数を呼ぶ!ということが可能なのでしょうか? >関数1を呼び出したら、その引数を関数1の中で関数2に渡したいのです。 >関数1( const char* aString, ... ); >関数2( int aSize, const char* aString aString, ... ); 可変個引数の間違いでしょうか? 結論としては不可能です。 vprintf()系の様に、va_listの形式であれば可能ですが…。 |
No.17770![]() |
Re:動的変数について教えてください 投稿者---初心者(2004/11/04 13:12:02) |
||
>>動的変数を持つ関数内から、その引数をそのまま、他の動的変数を持つ >>関数を呼ぶ!ということが可能なのでしょうか? >>関数1を呼び出したら、その引数を関数1の中で関数2に渡したいのです。 >>関数1( const char* aString, ... ); >>関数2( int aSize, const char* aString aString, ... ); > >可変個引数の間違いでしょうか? >結論としては不可能です。 > >vprintf()系の様に、va_listの形式であれば可能ですが…。 可変引数の間違いです。 すみません。 それぞれの関数インターフェイスは変更不可なた、 関数1内で、wvsprintfを用いて文字列化し、関数2へ "%s"をconst char*に指定するという方法しかない・・・ という結論に達しました。 お付き合いくださりありがとうございました(*^。^*) |
No.17771![]() |
Re:動的変数について教えてください 投稿者---tetrapod(2004/11/04 13:27:49) |
||
まあ確かに「そのままでは不可能」なのですが、こーいう場合は func1(const char *fix_arg, ...) { va_list v; va_start(v, fix_arg); func3(n, fix_arg, v); // この n はテキトーだけど va_end(v); } func2(int n, const char* fix_arg, ...) { va_list v; va_start(v, fix_arg); func3(n, fix_arg, v); va_end(v); } func3(int n, const char* fix_arg, va_list v) { ... } のようにして func2 の本体を func3 に移せばいい。 そーすれば見た目のインターフェイスは変わらない。 |