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

Adakah Terdapat `template` Setara dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-06 05:26:02254semak imbas

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>

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>

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>

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>

Daripada menulis:

<code class="cpp">foo<int>(5);</code>

Anda boleh menggunakan:

<code class="cpp">make_foo(5);</code>

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!

Kenyataan:
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