Hola, estoy tratando de convertir un estándar std::string
en uno, NSString
pero no tengo mucha suerte.
Puedo convertir con éxito de an NSString
a a std::string
con el siguiente código
NSString *realm = @"Hollywood";
std::string REALM = [realm cStringUsingEncoding:[NSString defaultCStringEncoding]];
Sin embargo, obtengo un error de tiempo de compilación cuando intento lo siguiente
NSString *errorMessage = [NSString stringWithCString:REALM encoding:[NSString defaultCStringEncoding]];
El error que obtengo es
Cannot convert 'std::string' to 'const char*' in argument passing
¿Me estoy perdiendo de algo?
Gracias por adelantado.
objective-c
nsstring
objective-c++
stdstring
Anthony McCormick
fuente
fuente
Respuestas:
Obtenga c-string de std :: string para la conversión:
fuente
En primer lugar, debe utilizar Objective-C ++ para que esto funcione en lo más mínimo; La forma más sencilla de asegurarse de que es cambiar el nombre de todos sus
*.m
archivos a*.mm
Con mucho, la forma manual más utilizable (no obsoleta) de introducir un C ++
std::string
en unNSString
es con:Esto funcionará en la mayoría de los casos, y si no está haciendo una detección y conversión de codificación específica, UTF-8 le dará un buen resultado por tener caracteres no latinos 'simplemente funcionan'.
Sin embargo, si está creando una aplicación más grande o no es el único que trabaja en ella, probablemente querrá algo que sea más fácil de aplicar.
Adaptado de los archivos de la lista de correo de cocoa-dev
Con eso en su lugar (y debidamente
#import
editado) ahora puede:Y lo mismo para
std::wstring
, que es más que útil.fuente
==
sino que sea la representación "más cercana" o la "mejor" que puedan hacer. En este caso, el receptor es laNSString
implementación de la clase, y el valor devuelto no es un objeto Objective-C, por lo que también podrían cubrir eso con algún lenguaje estándar.fuente
Apple ahora tiene una nueva forma en la que quieren que hagas esta conversión. En XCode7, utilicé la opción Editar> Convertir> A la sintaxis C moderna de Objective ... para averiguarlo. Utiliza un símbolo @ abreviado.
fuente
También encontré que:
Funciona como un campeón.
fuente
Aquí está el fragmento de código / ejemplo:
fuente