2013-03-17 11 views

risposta

2

Interessa solo il nome mangling in modo che la visibilità esterna sia chiara per altre applicazioni.

+0

Ma possono ancora essere sovraccaricati? Oppure possono restituire oggetti C++? –

+1

Sì e sì. provalo ... –

+0

@ H2CO3 - non saranno sovraccaricati, ad es. Farò l'overload manualmente, ma si applica il punto su come restituire oggetti C++. – dtech

0

Non si devono generare eccezioni da esse, ma in caso contrario è possibile implementare il corpo di una funzione extern "C" con tutte le funzionalità C++ desiderate.

Questo è perfettamente bene:

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

E le eccezioni gestite dal framework che utilizzo - Qt? – dtech

+1

Le eccezioni non devono attraversare il limite "extern" C "', poiché non si può essere sicuri che il chiamante possa gestirle, o anche se il chiamante è scritto in C++. – NovaDenizen

1

extern "C" fa non significa compilare il codice C. Significa solo che la funzione dovrebbe essere compilata in modo che possa essere chiamata dal codice C; ciò che effettivamente influenza è dipendente dall'implementazione. Tutto ciò che puoi fare in C++ va bene all'interno di tale funzione, incluso il lancio di eccezioni.

+0

Mi rendo conto che è un po 'tardi, ma per quanto riguarda i modelli? Non possono forse lavorare all'interno di una dichiarazione esterna, dal momento che proibisce la manipolazione del nome? – dtech