ホームページ > バックエンド開発 > C++ > 受信関数を変更せずに、ある関数から別の関数に変数引数を渡すにはどうすればよいですか?

受信関数を変更せずに、ある関数から別の関数に変数引数を渡すにはどうすればよいですか?

DDD
リリース: 2024-12-18 01:03:15
オリジナル
473 人が閲覧しました

How Can I Pass Variable Arguments from One Function to Another Without Modifying the Receiving Function?

変数引数リストを持つ関数に変数引数を渡す

同様の変数引数を持つ 2 つの関数を考えます:

void example(int a, int b, ...);
void exampleB(int b, ...);
ログイン後にコピー

example が exampleB を呼び出しますが、exampleB (使用されている) は変更しないとします。他の場所)。 example から exampleB に可変引数を渡すにはどうすればよいですか?

解決策:

引数を直接渡すことはできません。代わりに、va_list を取るラッパー関数を作成します:

#include <stdarg.h>
static void exampleV(int b, va_list args);
ログイン後にコピー

変更された関数 exampleA:

void exampleA(int a, int b, ...)    // Renamed for consistency
{
    va_list args;
    do_something(a);                 // Use argument a somehow
    va_start(args, b);
    exampleV(b, args);
    va_end(args);
}
ログイン後にコピー

未変更の関数 exampleB:

void exampleB(int b, ...)
{
    va_list args;
    va_start(args, b);
    exampleV(b, args);
    va_end(args);
}
ログイン後にコピー

ラッパーFunction exampleV:

static void exampleV(int b, va_list args)
{
    // Whatever `exampleB` was intended to do...
    // Except it doesn't call either `va_start` or `va_end`.
}
ログイン後にコピー

このアプローチにより、example から exampleB を変更せずに可変引数を渡すことができます。ラッパー関数 exampleV は va_start または va_end を呼び出しません。これにより、exampleB の既存の使用法との一貫性が確保されます。

以上が受信関数を変更せずに、ある関数から別の関数に変数引数を渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート