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?
ich weiss nicht, wie ich zu der Ehre komme, Expertenwissen in C++ weitergeben zu sollen… Gerne für C, C#, Smalltalk, Ruby, Lisp - aber C++ habe aus Prinzip nie gelernt
ich weiss nicht, wie ich zu der Ehre komme, Expertenwissen in
C++ weitergeben zu sollen… Gerne für C, C#, Smalltalk, Ruby,
Lisp - aber C++ habe aus Prinzip nie gelernt
Bin neu hier hab einfach nach dem Eingeben der Frage unten die „Experten“ zu C++ etc ausgewählt und abgeschickt. Du scheinst aber in diesen Listen dabei gewesen zu sein.
ich weiss nicht, wie ich zu der Ehre komme, Expertenwissen in
C++ weitergeben zu sollen… Gerne für C, C#, Smalltalk, Ruby,
Lisp - aber C++ habe aus Prinzip nie gelernt
Ich hab mein Problem gelöst. Da ich nichts gefunden habe wo ich meine Lösung schreiben kann nehme ich mal dich dafür her:
Also braucht man explizit den Copy Konstruktor oder Destruktor bei nur zur Runtime bekannten Typen kann man es folgendermaßen lösen:
Man macht eine Basis Klasse(z.b. CTypeOperator) mit 2 virtuellen Methoden:
nun schreibt man eine Template Klasse(z.b. CTypedOperator) die davon ableitet und die Funktionen jeweils implementiert also:
(T ist das Template Argument)
betreffs Ihrer Anfrage vom 11. des Monats muß ich Ihnen leider mitteilen, daß die Fragestellung meine Kenntnisse übersteigt.
Ich bitte auch um Entschuldigung, daß ich erst jetzt antworte, aber ich war ein paar Tage im „verlängerten Wochenende“, mußte dann erst ein neues Passwort bei „wer-weiß-was“ anfordern, etc. …
Ich hoffe, daß Sie entweder inzwischen von anderer Seite Hilfe für Ihr Problem gefunden haben, bzw. noch finden werden !
Mit herzlichem Gruß - H. Bergmann
>
> 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 : …
>
> Vielen Dank - Steffen
>