Heim > Artikel > Backend-Entwicklung > Gibt es ein „Template“-Äquivalent 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&) {} // do whatever }; template <typename T> foo<T> make_foo(const T& 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
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!