Olá, estou tentando converter um padrão std::string
em um, NSString
mas não estou tendo muita sorte.
Posso converter com sucesso de um NSString
para um std::string
com o seguinte código
NSString *realm = @"Hollywood";
std::string REALM = [realm cStringUsingEncoding:[NSString defaultCStringEncoding]];
No entanto, recebo um erro de tempo de compilação quando tento o seguinte
NSString *errorMessage = [NSString stringWithCString:REALM encoding:[NSString defaultCStringEncoding]];
O erro que recebo é
Cannot convert 'std::string' to 'const char*' in argument passing
Estou faltando alguma coisa aqui?
Desde já, obrigado.
objective-c
nsstring
objective-c++
stdstring
Anthony McCormick
fonte
fonte
Respostas:
Obtenha a string C de std :: string para conversão:
fonte
Em primeiro lugar, você tem que usar Objective-C ++ para que isso funcione no mínimo; maneira mais fácil de garantir que é renomear todos os seus
*.m
arquivos para*.mm
De longe, a maneira manual mais utilizável (não obsoleta) de
std::string
inserir um C ++ em umNSString
é com:Isso funcionará na maioria dos casos - e se você não estiver fazendo uma detecção e conversão de codificação específica, o UTF-8 vai lhe dar um bom resultado por ter caracteres não latinos 'apenas funcionam'.
Se você estiver fazendo um aplicativo maior ou não for o único trabalhando nele, provavelmente desejará algo mais fácil de aplicar.
Adaptado dos arquivos da lista de discussão cocoa-dev
Com isso instalado (e apropriadamente
#import
ed) agora você pode:E o mesmo para
std::wstring
, o que é mais do que útil.fonte
==
mas sim ser a representação "mais próxima" ou "melhor" que eles podem fazer. O receptor, neste caso, é aNSString
implementação da classe e o valor retornado não é um objeto Objective-C, então eles também podem estar cobrindo isso com alguma linguagem padrão.fonte
A Apple agora tem uma nova maneira pela qual desejam que você faça essa conversão. No XCode7, usei a opção Edit> Convert> To Modern Objective C Syntax ... para descobrir isso. Ele usa um símbolo @ abreviado.
fonte
Eu também descobri que:
Trabalha como um campeão.
fonte
Aqui está o snippet de código / exemplo:
fonte