Ho una classe che ha solo membri statici.Chiamare i puntatori alle funzioni C++ dalle librerie C
Vorrei registrare una delle sue funzioni membro (VerifyClean nel codice seguente) da chiamare all'uscita, utilizzando la funzione di libreria "atexit".
Il C++ FQA dice che devo specificare "C" extern per la funzione che voglio registrare in questo modo, come nell'esempio seguente.
class Example
{
public:
static void Initialize();
static void DoDirtyStuff {++dirtLevel;}
static void CleanUpStuff {--dirtLevel;}
private:
static void VerifyClean();
// DOESN'T COMPILE: extern "C" static void VerifyClean();
static int dirtLevel;
}
int Example::dirtLevel;
extern "C" void Example::VerifyClean() // DO I NEED extern "C" HERE?
{
assert(dirtLevel == 0);
}
void Example::Initialize()
{
dirtLevel = 0;
atexit(&VerifyClean);
}
Devo davvero usare "C" extern?
La risposta cambia se sostituisco "atexit" con una funzione non di libreria (implementata in plain C)?
Se la funzione VerifyClean era pubblica e ho deciso di chiamarla direttamente dal codice C++, avrei avuto errori di collegamento o arresti anomali del runtime? Lo chiedo perché la dichiarazione non menziona affatto la "C" extern, quindi il normale codice C++ potrebbe gestire la chiamata della funzione in modo errato. Funziona correttamente con il mio sistema MS Visual Studio 2005.
Perché avere una classe con solo funzioni statiche ? E l'FQA non è certo un buon posto per conoscere il C++. –
"FQA considerato nocivo" – jkerian
Il FQA C++ è una risorsa molto più affidabile per l'apprendimento del C++ rispetto alle FAQ. –