Heim > Backend-Entwicklung > C++ > Gibt es ein „Template'-Äquivalent in C?

Gibt es ein „Template'-Äquivalent in C?

Mary-Kate Olsen
Freigeben: 2024-11-06 05:26:02
Original
332 Leute haben es durchsucht

Is There a `template` Equivalent in C  ?

Können Sie Template

In diesem Beispiel müssen wir die Typen explizit angeben und die tatsächlichen Werte als Argumente an die Vorlagenleiste übergeben.

<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>();
}Ist es möglich, diese Syntax zu vereinfachen? ? Könnten wir es wie folgt ausdrücken:<p></p>
<p></p>Die Antwort:<pre class="brush:php;toolbar:false"><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>
Nach dem Login kopieren

Leider bietet C keinen direkten Weg, diese Syntax zu erreichen. Die nächstgelegene Alternative sind Makros

:

Eine weitere Alternative: Generatoren
<code class="cpp">#define AUTO_ARG(x) decltype(x), x

f.bar<AUTO_ARG(5)>();
f.bar<AUTO_ARG(&Baz::bang)>();</code>
Nach dem Login kopieren

Wenn Sie in erster Linie nach einer Möglichkeit suchen, die explizite Angabe von Typen zu vermeiden , eine Generatorfunktion kann eine praktikable Lösung sein:

Anstatt zu schreiben:

<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>
Nach dem Login kopieren

Sie können Folgendes verwenden:

<code class="cpp">foo<int>(5);</code>
Nach dem Login kopieren

Dies ermöglicht den Argumenttyp abgeleitet werden, wodurch der Code vereinfacht wird. Beachten Sie, dass dieser Ansatz template nicht direkt emuliert. Syntax, bietet aber eine praktische Alternative zum Übergeben von Argumenten an Vorlagen.

Das obige ist der detaillierte Inhalt vonGibt es ein „Template'-Äquivalent in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage