Bagaimana untuk Menggunakan Fungsi pada Semua Argumen Templat Variadic dalam C?

Susan Sarandon
Lepaskan: 2024-11-11 03:51:02
asal
250 orang telah melayarinya

How to Invoke a Function on All Variadic Template Arguments in C  ?

Templat Variadik C: Menjalankan Fungsi pada Semua Argumen Templat

Dalam C , selalunya wajar untuk mengulangi argumen templat variadic dan melaksanakan operasi tertentu, seperti memanggil sesuatu fungsi. Ini boleh dicapai menggunakan sama ada:

C 17 Fold Expression

(f(args), ...);
Salin selepas log masuk

Walau bagaimanapun, jika fungsi yang dipanggil berpotensi mengembalikan objek dengan pengendali koma yang terlebih beban, anda harus menggunakan:

((void)f(args), ...);
Salin selepas log masuk

Penyelesaian Pra-C 17

Pendekatan biasa ialah memanfaatkan permulaan senarai dan melakukan pengembangan di dalamnya:

{ print(Args)... }
Salin selepas log masuk

Memandangkan cetakan() mengembalikan tidak sah, anda boleh atasi masalah dengan mengembalikan int:

{ (print(Args), 0)... }
Salin selepas log masuk

Untuk memastikan ini berfungsi dengan sebarang bilangan argumen, anda boleh menjadikan pek sentiasa mempunyai sekurang-kurangnya satu elemen:

{ 0, (print(Args), 0)... }
Salin selepas log masuk

Anda boleh merangkum corak ini menjadi makro yang boleh diguna semula:

namespace so {
    using expand_type = int[];
}

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), 0)... }
Salin selepas log masuk

Untuk mengendalikan operator koma yang terlebih beban, anda boleh mengubah suai makro:

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) \
        ::so::expand_type{ 0, ((PATTERN), void(), 0)... }
Salin selepas log masuk

Jika anda bimbang tentang peruntukan memori yang tidak perlu, anda boleh menentukan jenis tersuai yang menyokong permulaan senarai tetapi tidak menyimpan data:

namespace so {
    struct expand_type {
        template <typename... T>
        expand_type(T&amp;&amp;...) {}
    };
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Fungsi pada Semua Argumen Templat Variadic dalam C?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan