Frage:
Kann ein String-Literal als übergeben werden? Nicht-Typ-Argument für eine Klassenvorlage, z. B. in einer Deklaration wie my_class<"string">?
Antwort:
Beim direkten Übergeben von String-Literalen als nicht -Typ-Vorlagenargumente sind nicht möglich, es gibt eine Lösung, die dem sehr nahe kommt.
Sie können einen nicht typisierten Vorlagenparameter vom Typ const char* verwenden und ihm eine const char[]-Variable mit statischer Verknüpfung übergeben. Dieser Ansatz weist Ähnlichkeiten mit der direkten Übergabe von Zeichenfolgenliteralen auf.
Hier ist ein kompilierbares Beispiel:
#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(); }
Der obige Code deklariert eine Klassenvorlage cts mit einem nicht typspezifischen Vorlagenparameter str, der eine Konstante annimmt Zeichenzeiger. Die mit statischer Verknüpfung definierte Variable teststr enthält das Zeichenfolgenliteral und wird an die Vorlageninstanziierung übergeben.
Diese Methode ist eine praktikable Alternative zur direkten Übergabe von Zeichenfolgenliteralen als Nichttyp-Vorlagenargumente.
Das obige ist der detaillierte Inhalt vonKönnen String-Literale als Nichttyp-Vorlagenargumente übergeben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!