Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Meluluskan Argumen Pembolehubah dari Satu Fungsi kepada Fungsi Yang Lain Tanpa Mengubahsuai Fungsi Penerimaan?

Bagaimanakah Saya Boleh Meluluskan Argumen Pembolehubah dari Satu Fungsi kepada Fungsi Yang Lain Tanpa Mengubahsuai Fungsi Penerimaan?

DDD
DDDasal
2024-12-18 01:03:15461semak imbas

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

Melalukan Argumen Pembolehubah kepada Fungsi dengan Senarai Argumen Pembolehubah

Pertimbangkan dua fungsi dengan argumen pembolehubah yang serupa:

void example(int a, int b, ...);
void exampleB(int b, ...);

Katakan contoh memanggil exampleB, tetapi tanpa mengubah suai exampleB (yang digunakan di tempat lain). Bagaimanakah kita boleh menghantar hujah pembolehubah daripada contoh kepada contohB?

Penyelesaian:

Menyampaikan hujah secara langsung tidak mungkin. Sebaliknya, kami mencipta fungsi pembalut yang mengambil va_list:

#include <stdarg.h>
static void exampleV(int b, va_list args);

Contoh Fungsi DiubahsuaiA:

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);
}

Contoh Fungsi Tidak DiubahsuaiB:

void exampleB(int b, ...)
{
    va_list args;
    va_start(args, b);
    exampleV(b, args);
    va_end(args);
}

Fungsi Pembungkus 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`.
}

Pendekatan ini membolehkan kita menghantar hujah pembolehubah daripada contoh kepada exampleB tanpa mengubah yang terakhir. Fungsi pembungkus exampleV tidak memanggil va_start atau va_end, yang memastikan konsistensi dengan penggunaan exampleB yang sedia ada.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meluluskan Argumen Pembolehubah dari Satu Fungsi kepada Fungsi Yang Lain Tanpa Mengubahsuai Fungsi Penerimaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn