Template Initialisierung in Wrapper Klasse



  • Hallo,

    ich bin leider noch kein C++ Profi und habe ein generelles Design Problem, hoffe ich kann es verständlich beschreiben.

    Problemstellung:
    Ich möchte eine Klassenstruktur entwickeln die nach außen als neutrales Interface agiert um intern verwendete 3rd Party Bibliotheken später evtl. austauschen zu können. Konkret möchte ich intern die Pointcloud Library verwenden und eine nach außen von der PCL unabhängige Pointcloud Processing Funktionalität anzubieten. Der Knackpunkt ist für mich jetzt das die PCL templateisierte Pointcloud Typen anbietet, je nachdem ob man nur XYZ Punkte hat oder noch Farbinformation vorhanden ist usw.

    Meine Klasse soll nun nach außen ebenfalls die Entscheidung des jeweiligen Typs realisieren aber natürlich ohne die PCL eigenen Template Parameter zu verwenden. Ich muss also im Konstruktor das jeweilige PCL Objekt instanzieren.

    Die Frage:
    Wie löst man in C++ elegant das Problem das ich in meiner Klasse einen Pointer auf ein Objekt festlege dessen Typ erst im Konstruktor bekannt wird. Die einzigen beiden Ideen die ich momentan habe wären:

    1. Ich lege als Membervariable einen Voidpointer 'void* pcl_cloud;' an und caste irgendwie im Konstruktor dann zum richtigen Typ oder

    2. Ich mache eine weitere Klassenhierarchie die jeden PCL Point Typ als child implementiert und lege in meiner Wrapper Klasse eine Membervariable als parent der Wrapper Klassenhierarchie an und instanziere im Konstruktor dann das jeweilige child.

    Kann mir jemand helfen was hierfür eine sowohl elegante als auch sichere Lösung ist und wie man das machen würde wenn man C++ beherrscht?

    Vielen Dank für jeden Hinweis und lieben Gruß



  • Ich verstehe dein Problem nicht wirklich.

    void* und "leider noch kein C++ Profi" hört sich nach einer gefährlichen Mischung an. Da würde ich eher boost::any benutzen.

    Die Frage ist aber, warum du in deinem Interface die verschiedenen Datentypen der Bibliothek auf einen abbilden willst. Ist das sinnvoll?


Anmelden zum Antworten