ホームページ > バックエンド開発 > C++ > 変数引数リストを使用して、ある関数から別の関数に変数引数を渡すにはどうすればよいですか?

変数引数リストを使用して、ある関数から別の関数に変数引数を渡すにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-08 15:05:11
オリジナル
353 人が閲覧しました

How Can I Pass Variable Arguments from One Function to Another with Variable Argument Lists?

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

変数引数リストを使用する関数を扱う場合、ある関数から変数を受け入れる別の関数に引数を渡すという課題が発生します。同様のリストが生じる可能性があります。

次のことを考慮してください。例:

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

ここで、example は exampleB を呼び出します。重要な問題は、exampleB (他のコンテキストで使用される可能性があります) を変更せずに、example の変数引数リストの変数を exampleB に渡す方法です。

直接受け渡しは不可能

残念ながら、直接関数間で可変引数を渡すことはできません。これを実現するには、カスタム ソリューションが必要です。

va_list ヘルパー関数の使用

このギャップを埋めるために、va_list を引数として受け入れるヘルパー関数を導入できます。

#include <stdarg.h>

static void exampleV(int b, va_list args);
ログイン後にコピー

exampleA (一貫性のために名前変更されました) は、このヘルパーを利用するように変更されていますfunction:

void exampleA(int a, int b, ...)
{
    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);
}
ログイン後にコピー

exampleV 内では、exampleB で実行される予定だった実際の操作を実行できます。 va_start や va_end は必要ありません。

static void exampleV(int b, va_list args)
{
    ...whatever you planned to have exampleB do...
    ...except it calls neither va_start nor va_end...
}
ログイン後にコピー

このアプローチを採用することで、効果的に変数を渡すことができます。 2 番目の関数の元の実装を変更することなく、ある関数から別の関数に引数を渡すことができます。

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

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