Template-Template-Parameter in C verwenden
Stellen Sie sich ein Szenario vor, in dem Sie über mehrere Funktionen wie a() und b() verfügen Führen Sie ähnliche Aufgaben mit unterschiedlichen internen Implementierungen aus. Um Coderedundanz zu vermeiden, können Sie mithilfe von Vorlagen eine generische Funktion erstellen. Wenn a() und b() jedoch selbst generisch sind, reicht es möglicherweise nicht aus, die äußere Funktion als Vorlage zu implementieren.
In diesem Zusammenhang können Sie auf Vorlagenparameter zurückgreifen. Während Vorlagen normalerweise Typen, Vorlagentypparameter oder Werte akzeptieren, können Sie eine Vorlagenfunktion nicht direkt als Typ übergeben, da sie eine Instanziierung erfordert.
Um dies zu umgehen, können Sie einen Workaround mit Dummy-Strukturen verwenden:
<code class="cpp">template <typename T> struct a { static void foo() {} }; template <typename T> struct b { static void foo() {} };</code>
Diese Strukturen fungieren als Platzhalter für den Template-Parameter template. Die Funktion selbst wird zu:
<code class="cpp">template <template <typename P> class T> void function() { T<SomeObj>::foo(); T<SomeOtherObj>::foo(); }</code>
Jetzt können Sie die generische Funktion mit verschiedenen Implementierungen von foo() verwenden, indem Sie die entsprechende Dummy-Strukturvorlage übergeben:
<code class="cpp">int main() { function<a>(); function<b>(); }</code>
Während Funktionszeiger a bereitstellen Als einfachere Problemumgehung in diesem speziellen Szenario bieten Vorlagenparameter eine allgemeinere Lösung für Probleme, die generische Funktionalität mit mehreren Implementierungen erfordern.
Das obige ist der detaillierte Inhalt vonWie können Vorlagenparameter verwendet werden, um generische Funktionen mit mehreren Implementierungen zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!