Sono in procinto di creare un wrapper C attorno a una libreria C++. Un errore comune da fare mentre si fa questo è avere una dichiarazione di funzione e una definizione che non corrispondono per qualche motivo (errore di battitura, rinomina, argomento ottenuto aggiunto/rimosso, ecc.).Operatore dell'ambito dello spazio nomi globale sulla definizione della funzione
Ad esempio:
// enabledata.h
MDS_C_API const char* motek_mds_enable_data_get_enable_command_name();
// enabledata.cpp
const char* motek_mds_enable_data_enable_command_name() { ... }
I nomi non corrispondono, ma a causa della mancanza di spazio per queste funzioni, non si tradurrà in qualsiasi errori di compilazione, e mostrerà solo molto più tardi su tutta la linea come errore di collegamento.
Voglio che il compilatore di aiutarmi a trovare questi errori utilizzando l'operatore scope globale in questo modo:
const char* ::motek_mds_enable_data_get_disable_command_name() { ... }
Questo sarà ora si mostrano come un errore di compilazione, se la funzione non è stata ancora dichiarata, che è esattamente quello che voglio
Tuttavia, questo non funziona quando la funzione restituisce un typedef:
int32_t ::motek_mds_enable_data_is_enabled(const Data* a_Data) { ... }
Questo si tradurrà in un tentativo di utilizzare int32_t
come un ambito che di risultati dei corsi in un errore:
left of '::' must be a class/struct/union
Esistono modi per farlo funzionare? Anche le migliori alternative sono benvenute.
Attualmente sto usando Visual Studio 2015 Update 2.
Credo 'decltype (int32_t()) :: motek_mds ... 'dovrebbe funzionare (rende il tipo di ritorno uno" specificatore di tipo semplice ", che non" inghiotte "il' :: '), ma non ha il tempo di testarlo per te .... TC la proposta è meno brutta comunque. –