Ich habe einige C-Strukturen, die durch einige Algorithmen verwendet werden, die C++ Teile miteinander verbinden.sicher dynamic_cast von c-Structure?
Am Eingabeende gibt es eine C++ - Struktur, die von der c-Struktur erbt, um einige Mitglieder hinzuzufügen. Am ausgangsseitigen Ende gibt es einige Komponenten, die diese Daten möglicherweise ebenfalls benötigen.
Gibt es einen sicheren Weg zu erkennen, ob diese C-Struktur tatsächlich die erwähnte C++ - Klasse ist? vielleicht, indem man c + + Kindklassen polymorph macht und dynamische Umwandlungen benutzt?
struct Cstruct{
int someData;
};
class CPPclass: public Cstruct{
CPPclass(){};
int someMoreData;
};
so vielleicht so etwas wie
class CPPclass: public Cstruct{
virtual ~CPPclass(){};
CPPclass(){};
int someMoreData;
};
void test(Cstruct* i_c){
auto cpp = dynamic_cast<CPPclass*>(i_c); // < does not work, because Cstruct is not polymorphic
if(cpp){
// da;
}
}
aber vielleicht ?:
class CPPclassHelper: public Cstruct{
virtual ~CPPclassHelper(){};
CPPclassHelper(){};
int someMoreData;
};
class CPPclass: public CPPclassHelper{
virtual ~CPPclassHelper(){};
};
void test(Cstruct* i_c){
auto cpph = static_cast<CPPclassHelper*>(i_c);
auto cpp = dynamic_cast<CPPclass*>(cpph);
if(cpp){
// da;
}
}
werden, wenn Sie "C-Struktur" sagen, meinen Sie eine Struktur deklariert 'extern "C"' und verwendet in einige bestehende C-Bibliothek oder Schnittstelle, oder? Was kann aus Kompatibilitätsgründen nicht geändert werden? – Useless
Wenn ich richtig verstehe, müssen Sie 'Cstruct' als C-Code kompilieren, aber Sie wollen später bestimmen können, ob ein' Cstruct * 'tatsächlich auf ein' CPPclass'-Objekt verweist, das etwas wie 'dynamic_cast' verwendet? –
@Useless 'extern" C "' hat keinen Einfluss auf Strukturdefinitionen. Es beeinflusst nur die Aufrufkonventionen der Funktionen –