Heim >Backend-Entwicklung >C++ >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 x> void bar() { // do something with X, compile-time passed } }; struct Baz { void bang() {} }; int main() { Foo f; f.bar<int>(); f.bar<decltype>(); }</decltype></int></class></code>Ist es möglich, diese Syntax zu vereinfachen? ? Könnten wir es wie folgt ausdrücken: Die Antwort:
<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(); f.bar(); }</auto></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>(); f.bar<auto_arg>();</auto_arg></auto_arg></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); }</t></t></typename></typename></code>
Sie können Folgendes verwenden:
<code class="cpp">foo<int>(5);</int></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!