Rumah > pembangunan bahagian belakang > C++ > Adakah Terdapat `template` Setara dalam C ?

Adakah Terdapat `template` Setara dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-11-06 05:26:02
asal
333 orang telah melayarinya

Is There a `template` Equivalent in C  ?

Bolehkah Anda Meniru Templat?

Keupayaan pengaturcaraan meta templat C membolehkan pembangun mencipta kod yang berkuasa dan cekap. Walau bagaimanapun, dalam senario tertentu, menghantar hujah kepada templat boleh menyusahkan. Pertimbangkan kod berikut:

<code class="cpp">struct Foo {
  template<class T, T X>
  void bar() {
    // do something with X, compile-time passed
  }
};

struct Baz {
  void bang() {}
};

int main() {
  Foo f;
  f.bar<int, 5>();
  f.bar<decltype(&Baz::bang), &Baz::bang>();
}</code>
Salin selepas log masuk

Dalam contoh ini, kita perlu menyatakan secara eksplisit jenis dan menghantar nilai sebenar sebagai argumen kepada bar templat.

Adakah mungkin untuk memudahkan sintaks ini ? Bolehkah kami menyatakannya seperti berikut:

<code class="cpp">struct Foo {
  template<auto X>
  void bar() {
    // do something with X, compile-time passed
  }
};

struct Baz {
  void bang() {}
};

int main() {
  Foo f;
  f.bar<5>();
  f.bar<&Baz::bang>();
}</code>
Salin selepas log masuk

Jawapannya:

Malangnya, C tidak menyediakan cara langsung untuk mencapai sintaks ini. Alternatif terdekat ialah makro:

<code class="cpp">#define AUTO_ARG(x) decltype(x), x

f.bar<AUTO_ARG(5)>();
f.bar<AUTO_ARG(&Baz::bang)>();</code>
Salin selepas log masuk

Alternatif Lain: Penjana

Jika anda sedang mencari cara untuk mengelak daripada menyatakan jenis secara eksplisit , fungsi penjana boleh menjadi penyelesaian yang berdaya maju:

<code class="cpp">template <typename T>
struct foo {
    foo(const T&amp;) {} // do whatever
};

template <typename T>
foo<T> make_foo(const T&amp; x) {
    return foo<T>(x);
}</code>
Salin selepas log masuk

Daripada menulis:

<code class="cpp">foo<int>(5);</code>
Salin selepas log masuk

Anda boleh menggunakan:

<code class="cpp">make_foo(5);</code>
Salin selepas log masuk

Ini membenarkan jenis hujah untuk disimpulkan, memudahkan kod. Ambil perhatian bahawa pendekatan ini tidak secara langsung meniru templat sintaks, tetapi ia menyediakan alternatif yang mudah untuk menghantar argumen kepada templat.

Atas ialah kandungan terperinci Adakah Terdapat `template` Setara 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