Statische Polymorphie dynamisch machen

Modernes C++ benutzt häufig statische Polymorphie, die auf Templates basiert. Das allerdings kann nicht nur zu Code-Bloat führen, sondern macht es auch unmöglich, die Objekte einer Klasse, die ein bestimmtes Konzept modelliert, in einer separat kompilierten Bibliothek zu benutzen – denn die kennt den Typ des Objekts ja nicht.

In graph-tool, genauer in graphml.hpp, bin ich auf eine schöne Musterimplementierung eines Wrappers gestoßen, der gewissermaßen statische Polymorphie in dynmische Polymorphie verwandelt.

Zum Anwendungsfall:

Es geht darum, GraphML-Dateien einzulesen. Dafür hat der Benutzer der Bibliothek ein Objekt einer Klasse, die das Konzept MutableGraph modelliert. Die Klasse mutate_graph stellt dann eine einheitliche Laufzeitschnittstelle für MutableGraphs zur Verfügung, die Wrapper für jeden einzelnen MutableGraph sind dann template class mutate_graph_impl, die von mutate_graph erben. Wo die Schnittstellen dann immer noch unterschiedlich sind, weil sie abhängige Typen verwenden, werden diese in boost::any gewrappt.

Et voilà – wir haben eine einheitliche Schnittstelle für MutableGraphs. Geht analog natürlich für fast beliebige andere Konzepte.

One thought on “Statische Polymorphie dynamisch machen

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht.

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>