2013-03-17 12 views

Antwort

2

Es betrifft nur den Namen Mangling, so dass die externe Sichtbarkeit für andere Anwendungen klar ist.

+0

Aber können sie immer noch überlastet sein? Oder können sie C++ Objekte zurückgeben? –

+1

Ja und ja. Probieren Sie es einfach aus ... –

+0

@ H2CO3 - sie werden nicht überlastet, z. Ich werde das Überladen manuell durchführen, aber der Punkt über die Rückgabe von C++ - Objekten gilt. – dtech

0

Sie sollten keine Ausnahmen von ihnen werfen, aber ansonsten können Sie den Rumpf einer extern "C" Funktion mit so vielen C++ - Funktionen implementieren, wie Sie möchten.

Das ist völlig in Ordnung:

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

Was ist mit Ausnahmen, die von dem Framework behandelt werden, das ich verwende - Qt? – dtech

+1

Die Ausnahmen sollten nicht die "externe" C-Grenze überschreiten, da Sie nicht sicher sein können, ob der Aufrufer mit ihnen umgehen kann oder ob der Aufrufer in C++ geschrieben ist. – NovaDenizen

1

extern "C" tut nicht als C-Code kompilieren bedeuten. Es bedeutet nur, dass die Funktion kompiliert werden sollte, damit es aus C-Code aufgerufen werden kann; Was das tatsächlich betrifft, ist implementierungsabhängig. Alles, was Sie in C++ tun können, ist innerhalb einer solchen Funktion in Ordnung, einschließlich des Auslösens von Ausnahmen.

+0

Ich merke, es ist ein bisschen spät, aber was ist mit Vorlagen? Sie können möglicherweise nicht innerhalb einer externen Deklaration arbeiten, da sie die Namensverfälschung verbietet? – dtech