2010-01-19 5 views
10

nimmt haben eine Funktion, die const std::wstring& FONT_FAMILY nimmt, das heißtWie eine Stringliteral auf eine Funktion zu übergeben, die ich const std :: wstring &

Font Font::CreateFont(const std::wstring& font_family){ ... } 

Durch Frage ist, wie kann ich ein Zeichenfolgenliteral, dass funcion rufen, indem (zB Monospace)?

Ich versuchte

CreateFont("monospace"); 
CreateFont("std::wstring("monospace")); 

Beide nicht kompiliert. Hat jemand eine bessere Idee?

Vielen Dank.

Antwort

14

Versuchen:

CreateFont(L"monospace"); 

Die führende "L" weist den Compiler eine breite (Wchar_t) Zeichenfolge zu erzeugen.

+0

Im Allgemeinen L „Stringliteral“ erzeugt ein Breitzeichen ('wchar_t') Stringliteral (das ist genau was Sie für 'std :: wstring' wollen.) Genau was' wchar_t' ist, ist plattformabhängig. Unter Windows speichert 'wchar_t' einen UTF-16-Codepunkt, auf anderen Plattformen kann er jedoch beispielsweise einen UTF-32-Codepunkt darstellen. – jamesdlin

+0

Beachten Sie, dass die Plattformabhängigkeit für die Antwort keine Rolle spielt. L "" ist ein 'wchar_t []' und 'std :: wstring' will ein' wchar_t * ', also funktioniert das auf allen Systemen, ob' wchar_t' 8, 16, 32 oder 42 Bits ist. – MSalters

1
std::wstring s(L"Monospace"); 
CreateFont(s); 

der Ctor für wstring nicht schmale Zeichen akzeptiert, Wides nur ...

Verwandte Themen