Heim >Backend-Entwicklung >C++ >Können Zeichenfolgen im C-Stil als Vorlagenargumente in C verwendet werden?

Können Zeichenfolgen im C-Stil als Vorlagenargumente in C verwendet werden?

Susan Sarandon
Susan SarandonOriginal
2024-10-30 17:54:31611Durchsuche

Can C-Style Strings Be Used as Template Arguments in C  ?

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!

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