Wenn ich eine Basisklasse habe:Generieren einer abgeleiteten Klasseninstanz aus einer Zeichenfolge ihres Namens. (Dh Reflexion)
class Base
{
public:
virtual void Test()=0;
};
und in einem dynamisch geladenen Modul (.so/DLL), implementiert I eine Klasse von diesem abgeleitet:
class SomethingFromBase : Base
{
...
};
und der Benutzer fragt, sobald diese Bibliothek geladen ist, eine Instanz von SomethingFromBase
zu erstellen (sagen wir, wir bekommen den Namen von cin.), Und wir wissen nichts von SomethingFromBase
(dh es gibt keine Möglichkeit, einfach if(inputstr == "SomethingFrombase") { ... }
zu tun eine Möglichkeit, eine Instanz von SomethingFromBase zu erstellen?
Ich bin ziemlich sicher, dass dies in (Standard) C++ unmöglich ist, aber ich hoffe immer, dass SO mich überraschen wird!
Wenn dies mit der Zugabe von einigen Bibliotheken möglich ist, würde ich immer noch gerne darüber wissen. Danke!
Bearbeiten: Siehe cdhowies Antwort. Guides zur Umsetzung dieser Technik: http://www.linuxjournal.com/article/3687?page=0,1 http://www.abstraction.net/ViewArticle.aspx?articleID=67
Ja, das ist die einzige Möglichkeit, die ich sehen kann, um dies zu erreichen. Sie müssen eine Art Registry verwalten, in der jeder neue Typ gespeichert und mit einer beliebigen Zeichenfolge verknüpft wird. –
Ah, nett und vernünftig, und praktisch kein Overhead, da es keine "echte" Reflexion ist. Cooles Zeug. –
Yup, nur der Overhead von Funktionszeigern. Schau dir auch den Leitfaden an, den ich gerade zu meiner Antwort hinzugefügt habe. – cdhowie