Ich habe gerade einen Anwendungsfall wo es sehr sehr nützlich wäre sich Adresse des Copy constructors, des Assignment operators oder des Cast operatores zu holen und zu speichern.
Hintergrund: Ich kann Member(Properties) von beliebigen Klassen per Name und ID ansprechen, auslesen und setzen. Da ich dafür intern void* brauche gleichzeitig aber typsicher sein will, brauche ich zusätzlich eine TypeID und über diese kann ich gewisse Daten des members abfragen: Typ, Offset, Name, Größe.
Beim setzen einer Property wäre es unheimlich schön wenn ich dafür den copy constructor verwenden kann. Allerding ist zudem Zeitpunkt(da Runtime) der Typ nicht mehr bekannt also kann ich auch keinen Cpy Ctor direkt aufrufen.
Mein Problem passiert in einer Template Klasse, um es für alle Membertypen zu gewährleisten:
Naiv würde ich folgendes schreiben
template struct SPropertyIDGenerator
{
static (T::*m_pCpyCtor)(const T&:wink:; //geht leider
//nicht, da kein
//return wert
//vorhanden ist
… weitere Member
}
und für die Addresse
blubb.m_pCpyCtor = &T::T(const T&:wink:;
Ich hab leider das Gefühl das es nur deswegen nicht funktioniert da die „Build-in“ Typen keine wirkliche funktion dafür haben deren Addresse man abfragen kann, da es mit einem Assembler befehl getan ist.
Deswegen denke ich, dass es in der Theorie doch eigentlich funktionieren müsste, wenn ich für die Basis Typen Template Spezialisierungen mache wo ich mir dann keinen Pointer auf die Operatoren merke. Kann das sein? Gibts einen vielleicht „besseren“ weg? Oder kann mir jemand eklären warum das in C++ nicht möglich ist?
Vielen Dank
Steffen