casten von void* zu std::map<> möglich?



  • Hallo,

    ich habe wie so oft ein Problemchen.
    Ich möchte einen vector aus std::function's erstellen, die teilweise unterschiedliche Rückgabetypen haben.
    Ich habe daher den vector als std::vector<std::function<void*()>> definiert.
    Das "Problem" ist, dass die Rückgabetypen nicht immer Pointer sind. Einige Funktionen geben ein Object vom Typ BaseClass* zurück, das ich ja problemlos von void* casten kann.
    Allerdings sollen ein paar Funktionen eine std::map<int, BaseClass*> zurückgeben.

    Kann ich also ein void* zu std::map<int, BaseClass*> casten? Oder muss ich dafür einen neuen vector mit einer passenden std::function-Signatur erstellen?



  • Einen void Pointer kann man nicht einfach zu einer Klasse casten. Höchstens zu einem Pointer dieser Klasse, also auch std::map<int, BaseClass*>* . Ob das allerdings sinnvoll ist ist eine andere Frage. Woher weißt du überhaupt was dein void Pointer mal war? Vermutlich gibt es bessere Möglichkeiten das zu erreichen was du vorhast.



  • sebi707 schrieb:

    Woher weißt du überhaupt was dein void Pointer mal war?

    Der vector ist eigentlich ein vector aus vectoren von functions, ich hab das nur der Übersichtlickeit halber wegegelassen. Die lambda-Funktionen der jeweiligen functions-vectoren haben immer die selbe Signatur und den gleichen Rückgabetyp.

    Und ja, es gibt andere Möglichkeiten, das Ziel zu erreichen, ich muss lediglich einer abstrakten Klasse 3 oder 4 zusätzliche Funktionen verpassen, also nichts unlösbares 😉

    Ich wollte nur wissen ob es vielleicht auch so möglich ist (ich bin schreibfaul 😃 ), also danke für die Info 🙂


Anmelden zum Antworten