Funktionspointer für Konstruktor



  • Servus,

    ich würde gerne folgendes machen. Eine Klasse soll eine Mehtode implementieren, in der ich ein Objekt mit den Standardkonstruktor oder mit einem x-beliebigen mit x-Parametern aufrufen kann. Mein Ansatz:

    // in einer Klasse
    template<class X>
    X* newObject(X* (*constructor) () = null)
    {
        X* obj = this->currentBlock.getRaw<X > (); // roher Speicher aus einem Block
    
        if (constructor == null)
            return new (obj) X();
        else
            return new (obj) constructor;
    };
    

    Kann ich das mit einem Template lösen, ala

    template<class X, ??? LangerNamezurUbersicht>
    X* newObject(X* (*constructor) (LangerNamezurUbersicht) = null)
    {
    

    Oder bin ich da auf dem falschen Dampfer? Wahrscheinlich ist es wieder eine Kleinigkeit und ich währe froh, wenn jemand mir das mitteilen könnte 🙂

    Gruß
    Thomas



  • Das wäre doch etwas für Policy basiertes Design:

    struct my_creator
    {
    	template <class T>
    	static T* create ()
    	{
    		//
    		return new T;
    	}
    };
    
    struct your_creator
    {
    	template <class T>
    	static T* create ()
    	{
    		//
    		return new T;
    	}
    };
    
    class foo
    {
    public:
    	template <class T, class creator>
    	T* create ()
    	{
    		return creator::create<T>();
    	}
    };
    
    int main ()
    {
    	foo f;
    	f.create<int,my_creator> ();
    	f.create<int,your_creator> ();
    }
    


  • Danke, manchmal sehe ich den Wald vor lauter Bäume nicht mehr 🙂



  • Eine andere Möglichkeit wäre es mit Funktionsobjekten zu arbeiten, wie es die Standardbibliothek ebenfalls häufig tut.



  • drakon schrieb:

    Eine andere Möglichkeit wäre es mit Funktionsobjekten zu arbeiten, wie es die Standardbibliothek ebenfalls häufig tut.

    Was ich nun auch umgesetzt habe. Statische Strukturen schränken das Ganze stark ein 😉



  • Siassei schrieb:

    drakon schrieb:

    Eine andere Möglichkeit wäre es mit Funktionsobjekten zu arbeiten, wie es die Standardbibliothek ebenfalls häufig tut.

    Was ich nun auch umgesetzt habe. Statische Strukturen schränken das Ganze stark ein 😉

    Ist für Parameter sicher sinnvoller, ja.


Anmelden zum Antworten