Können Zeichenfolgen im C-Stil Vorlagenargumente sein?
Ihr Versuch, eine Vorlage mithilfe einer Zeichenfolge im C-Stil zu instanziieren, schlägt mit einem Fehler fehl zur ungültigen Verwendung eines String-Literals als Vorlagenargument.
Während Zeichenfolgen im C-Stil nicht direkt als Vorlagenargumente dienen können, gibt es alternative Ansätze:
Verwenden Sie einen Zeiger auf a Konstante Zeichenfolge
Eine Problemumgehung besteht darin, einen Zeiger auf eine konstante Zeichenfolge als Vorlagenargument zu verwenden:
<code class="c++">template <char const *str> struct X { const char *GetString() const { return str; } }; char global_string[] = "String"; int main() { X<global_string> x; cout << x.GetString(); }
Update: Zeichenfolgenliterale als Vorlagenargumente mit C 11
Ab C 11 ist es möglich, Zeichenfolgenliterale als Vorlagenargumente zu verwenden, indem Zeichenpakete verwendet werden:
<code class="c++">template <char ...c> struct X { const char (*GetString)() { return [](char*... s) { return s; }(c...); } }; int main() { X<"S", "t", "r", "i", "n", "g"> x; cout << x.GetString(); }</code>
Das obige ist der detaillierte Inhalt vonKönnen Zeichenfolgen im C-Stil als Vorlagenargumente in C verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!