Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Meluluskan Argumen Pembolehubah dari Satu Fungsi kepada Fungsi Yang Lain Tanpa Mengubahsuai Fungsi Penerimaan?
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!