C-Style-Strings als Vorlagenargumente
Im Bereich der C-Programmierung sind Sie möglicherweise auf ein Dilemma gestoßen: Der Versuch, C-Style-Strings als Vorlagenargumente zu verwenden Stilzeichenfolgen als Vorlagenargumente. Dieser Artikel befasst sich mit dem Problem und einer möglichen Problemumgehung.
Der folgende Codeausschnitt veranschaulicht den Versuch:
<code class="cpp">template <char *str> struct X { const char *GetString() const { return str; } }; int main() { X<"String"> x; cout << x.GetString(); }
Trotz des Fehlens von Kompilierungsfehlern in der Klassendefinition führt die Instanziierung jedoch zu einem Ergebnis eine Fehlermeldung. Das Problem liegt im Versuch, ein String-Literal als Vorlagenargument zu verwenden, was vom Compiler nicht unterstützt wird.
Eine einfache Lösung besteht darin, das String-Literal durch einen Zeichenzeiger zu ersetzen:
<code class="cpp">char global_string[] = "String"; template <char const *str> struct X { const char *GetString() const { return str; } }; int main() { X<global_string> x; cout << x.GetString(); }</code>
Dieser Code wird erfolgreich kompiliert und ausgeführt, sodass Sie die gespeicherte Zeichenfolge mithilfe der GetString-Methode abrufen können.
Beachten Sie, dass es mit der Einführung von C 11 nun möglich ist, Zeichenfolgenliterale als Vorlagenargumente mithilfe von Zeichen zu verwenden Packungen. Für Compiler, die frühere C-Versionen unterstützen, bleibt die hier vorgestellte Problemumgehung jedoch eine praktikable Option.
Das obige ist der detaillierte Inhalt vonKönnen Zeichenfolgen im C-Stil Vorlagenargumente in C sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!