2013-03-17 19 views

Odpowiedz

2

Dotyczy tylko mangowania nazw, dzięki czemu widoczność zewnętrzna jest widoczna dla innych aplikacji.

+0

Ale czy nadal mogą być przeciążone? Czy mogą zwrócić obiekty C++? –

+1

Tak i tak. po prostu spróbuj ... –

+0

@ H2CO3 - nie będą przeciążone, np. Będę robił przeciążanie ręcznie, ale chodzi o punkt zwracania obiektów C++. – dtech

0

Nie powinieneś wyrzucać z nich wyjątków, ale poza tym możesz zaimplementować funkcję extern "C" z tylu funkcjami C++, ile chcesz.

Jest perfekcyjnie:

MyObject myobj; 
extern "C" { 
    int myfunc(char *c) 
    { // c++ features used here 
     std::string s = myobj.method(.... 
    } 
} 
+0

Co z wyjątkami, które są obsługiwane przez framework, którego używam - Qt? – dtech

+1

Wyjątki nie powinny przekraczać granicy "extern" C ", ponieważ nie można mieć pewności, że wywołujący może je obsłużyć, lub nawet jeśli wywołujący jest napisany w C++. – NovaDenizen

1

extern "C" robi nie znaczy jak skompilować kod C. Oznacza to, że funkcja powinna być tak skompilowana, aby można ją było wywołać z kodu C; to, co faktycznie wpływa, zależy od implementacji. Wszystko, co możesz zrobić w C++, jest w porządku w takiej funkcji, włączając w to rzucanie wyjątków.

+0

Zdaję sobie sprawę, że jest nieco późno, ale co z szablonami? Nie mogą pracować wewnątrz deklaracji zewnętrznej, ponieważ zabrania ona wymazywania nazw? – dtech