Bolehkah Fungsi Templat Diluluskan sebagai Argumen Templat dalam C?

Mary-Kate Olsen
Lepaskan: 2024-11-02 18:44:02
asal
361 orang telah melayarinya

Can Template Functions Be Passed as Template Arguments in C  ?

Fungsi Templat sebagai Argumen Templat

Dalam C , pengaturcaraan generik boleh dicapai melalui penunjuk fungsi atau templat. Walaupun templat memastikan panggilan fungsi sebaris, ia menghadapi had apabila berurusan dengan fungsi generik itu sendiri.

Pernyataan Masalah

Pertimbangkan kod berikut:

<code class="cpp">void a(int) {
    // do something
}
void b(int) {
    // something else
}

template<void (*param)(int) >
void function() {
    param(123);
    param(456);
}</code>
Salin selepas log masuk

Walaupun fungsi templat ini memudahkan pengulangan antara fungsi1 dan fungsi2, ia menjadi bermasalah apabila a dan b adalah generik sendiri:

<code class="cpp">template<typename T>
void a(T t) {
    // do something
}

template<typename T>
void b(T t) {
    // something else
}

template< ...param... > // ???
void function() {
    param<SomeType>(someobj);
    param<AnotherType>(someotherobj);
}</code>
Salin selepas log masuk

Penyelesaian: Parameter Templat Templat

Untuk menentukan fungsi generik dengan fungsi generik a dan b, kita perlu menggunakan parameter templat templat. Walau bagaimanapun, melepasi fungsi ini sebagai jenis secara langsung tidak mungkin. Oleh itu, kami menggunakan penyelesaian dengan struktur dummy:

<code class="cpp">template<typename T>
struct a {
    static void foo(T = T()) {}
};

template<typename T>
struct b {
    static void foo(T = T()) {}
};

template<template<typename P> class T>
void function() {
    T<SomeObj>::foo();
    T<SomeOtherObj>::foo();
}</code>
Salin selepas log masuk

Dengan menentukan parameter templat templat sebagai struktur tiruan a dan b, kami boleh membuat instantiate fungsi templat dan memanggil kaedah foo generik dalam fungsi.

Atas ialah kandungan terperinci Bolehkah Fungsi Templat Diluluskan sebagai Argumen Templat 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