2010-01-19 10 views
10

tengo una función que toma const std::wstring& FONT_FAMILY, es decirCómo pasar una cadena literal a una función que toma const std :: wstring y

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

Por pregunta es ¿cómo puedo llamar a esa funcion pasando una cadena literal (por ejemplo, monoespacio)?

me trataron

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

Ambos no se compila. ¿Alguien tiene una mejor idea?

Gracias.

Respuesta

14

Probar:

CreateFont(L"monospace"); 

El líder de "L" indica al compilador para generar una cadena de ancho (wchar_t).

+0

En general, L "cadena literal" genera un carácter ancho ('wchar_t') cadena literal (que es exactamente lo que quiere para 'std :: wstring'.) Exactamente qué' wchar_t' es dependiente de la plataforma. En Windows, un '' wchar_t' almacena un punto de código UTF-16, pero en otras plataformas podría representar, por ejemplo, un punto de código UTF-32. – jamesdlin

+0

Tenga en cuenta que la dependencia de la plataforma no tiene importancia para la respuesta. L "" es un 'wchar_t []' y 'std :: wstring' quiere un' wchar_t * ', así que esto funciona en todos los sistemas, ya sea' wchar_t' en 8, 16, 32 o 42 bits. – MSalters

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

la ctor para wstring no acepta caracteres estrechos, solamente wides ...

Cuestiones relacionadas