Kann objective-C oder Objective C ++ C ++ - Ausnahmen behandeln?

8

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.

    
Ahmed 17.12.2012, 08:02
quelle

2 Antworten

7

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).

    
Wade Tregaskis 17.12.2012, 16:26
quelle
-3

Einfache Antwort: ja. Wie es geht? Vielleicht kann dieser Link helfen.

    
codingNinja 17.12.2012 08:50
quelle