Heim  >  Artikel  >  Backend-Entwicklung  >  Gibt es ein „Template“-Äquivalent in C?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-06 05:26:02253Durchsuche

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>

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>

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>

Sie können Folgendes verwenden:

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

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!

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