Ist es legal eine struct
als C- struct
definieren vorwärts erklärt C-Struktur als C++ - <code>struct</code>, dh als nicht-POD - struct
// api.h
#ifdef __cplusplus
extern "C" {
#endif
typedef struct handle_tag handle_t;
handle_t *construct();
void destruct(handle_t *h);
void func(handle_t *h);
#ifdef __cplusplus
}
#endif
und anschließend definieren es als eine C++ zu zukunfts erklären Art?
// api.cpp
struct handle_tag {
void func();
std::string member;
};
void func(handle_t *h) {
h->func();
}
Die allgemeine Absicht ist, über eine C-Schnittstelle einen von außen zugänglichen opaken Typ handle_t
zu erhalten, die intern als C++ Datentyp implementiert ist.
Übrigens ist PODness nicht verwandt mit C vs. C++ - Verknüpfung. C++ - Namen werden unabhängig davon, ob es sich um PODs handelt, verfälscht. –
@KonradRudolph Diese Struktur ist nicht POD –
@ BЈовић Nun ja, niemand behauptete, es zu sein, nicht wahr? –