Heim >Backend-Entwicklung >C++ >Wie kann ich String-Literale als Nichttyp-Vorlagenargumente in C verwenden?
Übergabe von String-Literalen als Nicht-Typ-Vorlagenargumente
Im Bereich des C-Templatings die Deklaration einer Klassenvorlage, die ein String-Literal als akzeptiert Ein nicht typisierter Vorlagenparameter kann eine verwirrende Aufgabe sein. Viele Programmierer wünschen sich die Möglichkeit, ein String-Literal direkt in einer Vorlagendeklaration anzugeben, z. B. my_class<"string">.
Um diesem Bedarf gerecht zu werden, erlaubt C zwar nicht direkt die Übergabe von String-Literalen als Nicht-Typ Argumente kann eine Lösung verwendet werden, die konstante Zeichenarrays verwendet. Indem wir eine statisch verknüpfte const char[]-Variable definieren und sie als Vorlagenparameter übergeben, erzielen wir einen ähnlichen Effekt wie die Verwendung von Zeichenfolgenliteralen.
Hier ist ein kompilierbarer Codeausschnitt, der diesen Ansatz demonstriert:
#include <iostream> template<const char *str> struct cts { void p() {std::cout << str;} }; static const char teststr[] = "Hello world!"; int main() { cts<teststr> o; o.p(); }
In diesem Beispiel wird eine statisch verknüpfte const char[]-Variable namens teststr mit dem Wert „Hello world!“ definiert. Indem wir teststr als nicht typisierten Vorlagenparameter an die CTS-Klassenvorlage übergeben, erreichen wir effektiv das gewünschte Verhalten bei der Verwendung eines Zeichenfolgenliterals.
Das Ausführen dieses Codes erzeugt die folgende Ausgabe:
Hello world!
Diese Technik bietet einen Workaround für den Mangel an direkter Unterstützung für die Übergabe von String-Literalen als Nicht-Typ-Template-Argumente in C und ermöglicht es Programmierern, Klassenvorlagen zu definieren, die string-ähnliche Werte auf praktische Weise akzeptieren Art und Weise.
Das obige ist der detaillierte Inhalt vonWie kann ich String-Literale als Nichttyp-Vorlagenargumente in C verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!