2012-12-17 23 views
8

Mam biblioteki C++ do komunikacji sieciowej, które muszę port dla Mac, wcześniej ta biblioteka była używana w aplikacji Windows C++.Czy obiekt C lub Objective C++ obsługuje wyjątki C++?

Przepływ C++ Lib Network opiera się na wyjątki w przypadku błędów, zamiast wracać kod błędu lub ostatni błąd ..

Teraz ponieważ na Mac używamy Objective-C/C++ dla aplikacji. Potrzebuję interfejsu użytkownika w Objective-C/C++, ale biblioteka używana do funkcji sieci rdzeniowej jest tą samą biblioteką C++.

Moje pytanie brzmi, czy cel C będzie w stanie obsłużyć wyjątki wywoływane przez wywołania C++? Jeśli tak to jak ? jeśli nie, jak mam to rozwiązać? Czy możemy napisać wrapper wokół wywołań C++ Lib i skonsumować wyjątki i zwrócić kody błędów?

Proszę doradzić, jak go rozwiązać ..

Odpowiedz

7

Pod warunkiem, że korzystasz z systemu iOS lub 64-bitowego środowiska wykonawczego w systemie OS X, wszystko działa. Możesz napisać próbę/catch w stylu C++ i będzie działać zgodnie z oczekiwaniami, tak jak @ try/@ catch. Zauważ, że nadal będziesz mieć dwa odrębne style, dla wyjątków w Objective-C i C++; jedynym ujednoliceniem jest special case, w którym wyjątki, Objective-C lub C++, są wyjątkami catch(...) lub. To jest mało przydatne do scentralizowania twojego kodu oczyszczającego, ale o tym, co możesz wtedy zrobić z samym wyjątkiem, to ponownie rzucić na oślep.

Ale w każdym razie programy exceptions shouldn't be used for flow control in Objective-C (lub Objective-C++). Powinieneś naprawdę starać się przechwycić wyjątki C++ po wyjściu z biblioteki i przekonwertowaniu ich na bardziej odpowiedni mechanizm, taki jak NSError. W szczególności, unikaj pozwalania każdemu z nich na przechwytywanie przez dowolne frameworki Apple lub 3rd party - większość takich frameworków nie jest wyjątkowo bezpieczna dla wyjątków Objective-C, nie mówiąc już o C++, a konsekwencje są w ten sposób niezdefiniowane (głównie w przypadku wycieków pamięci, chociaż wiele inne awarie są możliwe).

+0

Dobra odpowiedź. Wyjątki są rzadkością w dobrym kodzie Objective-C i ludzie często zapominają o tym, kiedy pochodzą z innych języków. –

+2

Czy możesz wyjaśnić, jak złapać kody rzutowe od strony C++? –

-3

Prosta odpowiedź: tak. Jak to zrobić? Może ten link może pomóc.

+3

Nie publikuj odpowiedzi tylko do linków. Opublikowany link jest już martwy, więc ta odpowiedź nie jest przydatna. –