Ich habe eine C ++ - Bibliothek für die Netzwerkkommunikation, die ich für Mac portieren muss, vorher wurde diese Bibliothek in der Windows C ++ App verwendet.
Der Ablauf der C ++ Network Lib basiert auf Exceptions im Falle von Fehlern, anstatt den Fehlercode oder den letzten Fehler zurückzugeben.
Seit dem Mac verwenden wir Objective-C / C ++ für Apps. Ich brauche UI in Objective-C / C ++, aber die für die Kernnetzwerkfunktion verwendete Bibliothek ist dieselbe C ++ - Bibliothek.
Meine Frage ist also, ob das Ziel C in der Lage sein wird, Ausnahmen zu behandeln, die von C ++ - Anrufen ausgelöst werden? Wenn das so ist, wie ? wenn nicht, wie kann ich es lösen? Oder schreiben wir einen Wrapper um C ++ Lib-Aufrufe und verbrauchen Ausnahmen und geben Fehlercodes zurück?
Bitte beraten Sie, wie Sie es lösen können.
Vorausgesetzt, Sie verwenden iOS oder die 64-Bit-Laufzeit unter OS X, funktionieren die Dinge ziemlich gut. Sie können einen C ++ - Versuch / Fang schreiben und er wird wie erwartet funktionieren, wie auch @ try / @ catch. Beachten Sie, dass Sie immer noch die zwei verschiedenen Stile für Objective-C und C ++ - Ausnahmen haben werden; Die einzige Vereinheitlichung ist die Sonderfall , bei dem ein catch(...)
oder @catch(...)
alle Ausnahmen abfängt, Objective-C oder C ++. Das ist für die Zentralisierung Ihres Bereinigungscodes am Rande nützlich, aber über alles, was Sie dann mit der Ausnahme selbst tun können, ist es @ blind es wieder blind.
Aber auf jeden Fall Ausnahmen sollten nicht für die Flusskontrolle in Objective-C (oder Objective-C ++) Programmen verwendet werden. Sie sollten in der Tat versuchen, die C ++ - Ausnahmen beim Verlassen der betreffenden Bibliothek abzufangen und sie in einen geeigneteren Mechanismus wie NSError umzuwandeln. Vermeiden Sie insbesondere, dass irgendjemand sie durch Apple oder Frameworks von Drittanbietern anruft - die meisten dieser Frameworks sind nicht ausnahmslos sicher für Objective-C-Ausnahmen, geschweige denn für C ++ - und die Konsequenzen sind somit undefiniert (meist um Speicherlecks herum) andere Fehler sind möglich).
Einfache Antwort: ja. Wie es geht? Vielleicht kann dieser Link helfen.
Tags und Links objective-c c++ objective-c++ exception