Heim >Backend-Entwicklung >C++ >Wie kann ich String-Literale als Nichttyp-Vorlagenargumente in C verwenden?

Wie kann ich String-Literale als Nichttyp-Vorlagenargumente in C verwenden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-29 15:14:14869Durchsuche

How can I use string literals as non-type template arguments in C  ?

Ü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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn