Wie kann in C eine Vorlagenfunktion als Vorlagenargument verwendet werden, um die Wiederverwendung von Code zu erreichen? Aufrechterhaltung der generischen Funktionalität, insbesondere wenn die beteiligten Funktionen selbst ebenfalls Vorlagen sind?
Um dieses Problem zu beheben, verwenden Sie einen Template-Template-Parameter. Das Hauptkonzept besteht darin, dass Vorlagenparameter aufgrund der Notwendigkeit einer vorherigen Instanziierung keine direkten Vorlagenfunktionen enthalten können. Eine Problemumgehung besteht darin, Dummy-Strukturen zu verwenden, um die Vorlagenfunktion zu kapseln:
<code class="cpp">template <typename T> struct a { static void foo(T = T()) {} }; template <typename T> struct b { static void foo(T = T()) {} }; struct SomeObj {}; struct SomeOtherObj {}; template <template <typename P> class T> void function() { T<SomeObj>::foo(); T<SomeOtherObj>::foo(); } int main() { function<a>(); function<b>(); }</code>
In diesem Beispiel implementieren die Strukturen a und b Vorlagenfunktionen für die foo-Methode. Die Funktionsvorlage benötigt einen Vorlagenparameter, der es uns ermöglicht, die Vorlagen a und b als Argumente zu übergeben. Innerhalb der Funktion werden spezifische Instanzen der Dummy-Strukturen erstellt, die den Aufruf von foo mit verschiedenen Parametertypen ermöglichen.
Das obige ist der detaillierte Inhalt vonWie können Template-Funktionen als Template-Argumente in C verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!