Ich versuche, eine API um die folgende Klassenvorlage zu schreiben:wie dynamisch eine Template-Klasse Guss
template <class A, class B>
class MyClass {
public:
A foo;
B bar;
MyClass();
MyClass(A in1, B in2) {
foo = in1; bar = in2;
}
void operator = (MyClass<A, B> in) {
foo = in.foo; bar = in.bar;
}
};
Als Teil dieser API, würde ich Implementierer wie dynamisch zwischen verschiedenen werfen zu können, Arten von MyClass
. Um dies zu erreichen, habe ich die folgende Funktion geschrieben:
Dieser Code kompiliert ohne Fehler.
Meine Frage:
Unter der Annahme, dass sowohl C operator C (A)
und D operator D (B)
für jede gegebene Implementierung der obigen Funktion definiert sind, wird diese verrückten suchen Funktion ausreichend sein Implementierer zu ermöglichen, dynamisch gegossen zwischen verschiedenen Arten von MyClass
, (via (MyClass<C, D>)MyClass<A, B>
) oder habe ich es komplett verloren?
Beispielimplementierung:
/*
* --- INCLUDE ABOVE CLASS DEFINITION HERE ---
*/
#include <iostream>
#include <string>
int main() {
MyClass<int, char> foo(42, 'q');
MyClass<double, std::string> bar;
bar = (MyClass<double, std::string>) foo;
}
können Sie ein minimales übersetzbares Testprogramm zur Verfügung stellen? Die Frage ist cool. – Chiel
Bitte verwenden Sie den Ausdruck "dynamically cast" für die Operation "dynamic_cast", um Verwechslungen zu vermeiden. Es gibt nichts Dynamisches in dem, was Sie gezeigt haben. Ihre verrückte Funktion sieht nicht korrekt aus. Die Typumwandlung wird entweder durch die nichtstatische Elementfunktion 'Class :: operator TYPE()' (keine Argumente, kein expliziter Rückgabetyp - Konvertierung von Klasse in TYPE) oder durch einen Konstruktor mit einem Argument angegeben: Class :: Class (TYPE) (Konvertierung von Typ zu Klasse). –
@ n.m. Entschuldigung, ich hatte nicht realisiert, dass Typecasting-Operatoren nicht als "dynamisch" gelten. Vielleicht sollte ich die Terminologie der Typumwandlung prüfen. –