Eu facilito. Eu adiciono um novo arquivo C ++ ao meu projeto do Objective C, renomeio para .mm e, em seguida, crio uma classe C ++ padrão dentro. Em seguida, crio um método de classe estática na seção "public:" para uma função C ++ que pega um NSString e retorna um NSString (ou NSArray, se é isso que você deseja). Em seguida, converto o NSString em C ++ std :: string da seguinte forma:
// If anyone knows a more efficient way, let me know in the comments.
// The "if" condition below is because ObjC crashes if converting to
// std::string if the string is nil or empty.
// assume #include <string>
std::string s = "";
if (([sInput != nil]) && (!([sInput isEqualTo:@""]))) {
std::string sTemp([sInput UTF8String]);
s = sTemp;
}
A partir daí, eu posso usar regex_replace da seguinte maneira:
// assume #include <regex>
std::string sResult = std::regex_replace(sSource,sRegExp,sReplaceWith);
Em seguida, posso converter essa std :: string novamente em um NSString com:
NSString *sResponse2 = @(sResult.c_str());
Se você estiver usando apenas este C ++ apenas para esta função, poderá achar adequado chamar esse arquivo extra.mm (nome da classe Extra) e colocar esse método de classe estática e adicionar outros métodos de classe estática quando a situação chegar onde faz sentido fazê-lo em C ++, porque é menos problemático em alguns casos. (Há casos em que o ObjC faz algo com menos linhas de código e alguns casos em que o C ++ faz com menos linhas de código.)
PS Ainda outra maneira disso é usar um arquivo .mm, mas criar um wrapper de Objective C em torno do uso de std :: string e std :: regex_replace () (ou regex_match ()).