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
Lepaskan: 2024-12-18 01:03:15
asal
464 orang telah melayarinya

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, ...);
Salin selepas log masuk

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);
Salin selepas log masuk

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);
}
Salin selepas log masuk

Contoh Fungsi Tidak DiubahsuaiB:

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

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`.
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan