मैं इसे आसान बनाता हूं। मैं अपने उद्देश्य सी प्रोजेक्ट में एक नई C ++ फ़ाइल जोड़ता हूं, इसे .mm के रूप में नाम देता हूं, और फिर एक मानक C ++ वर्ग अंदर बनाता हूं। फिर, मैं C ++ फ़ंक्शन के लिए "सार्वजनिक:" अनुभाग में एक स्थिर वर्ग विधि बनाता हूं जो NSString लेता है और एक NSString (या NSArray, यदि आप चाहते हैं तो) लौटाते हैं। मैं तो NSString को C ++ std :: string में परिवर्तित करता हूं:
// 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;
}
वहाँ से, मैं regex_replace का उपयोग कर सकता हूँ जैसे:
// assume #include <regex>
std::string sResult = std::regex_replace(sSource,sRegExp,sReplaceWith);
फिर, मैं उस std :: string को वापस NSString में बदल सकता हूँ:
NSString *sResponse2 = @(sResult.c_str());
यदि आप केवल इस फ़ंक्शन के लिए केवल C ++ का उपयोग कर रहे हैं, तो आप इस फ़ाइल को अतिरिक्त कॉल करने के लिए उपयुक्त पा सकते हैं। मिमी (वर्ग नाम अतिरिक्त) और इस स्थिर वर्ग विधि को अंदर रखें, और फिर स्थिति आने पर अन्य स्थिर वर्ग विधियों को जोड़ें। जहां यह सिर्फ C ++ में करने के लिए समझ में आता है क्योंकि यह कुछ मामलों में कम परेशानी है। (ऐसे मामले हैं जहां ओबीजीसी कोड की कम लाइनों के साथ कुछ करता है, और कुछ मामलों में जहां सी ++ कोड की कम लाइनों के साथ करता है।)
पुनश्च अभी भी इसके साथ एक और तरीका है एक .mm फ़ाइल का उपयोग करें, लेकिन std :: string और std :: regex_replace () (या regex_match ()) के उपयोग के आसपास एक उद्देश्य C आवरण बनाएं।