Geht das?



  • Hallo,
    ich hab folgendes Problem.
    Ich hab eine Klasse und diese Klasse soll eine Ausgabe Funktion bekommen.

    myClass.print(
    

    und als Parameter soll eine andere Funktion angeben werden wo der erste Parameter vom print member mit den Ausgabewert gefüllt wird. Die restlichen Parameter sind aber egal bzw. werden bei den Aufruf übergeben.

    myClass.print(void(*)(std::string, std::cout);
    
    myClass.print(void(*)(std::string, 10, 20);
    

    Die Print Funktion soll dann in etwa so aussehen:

    void myClass::print(???)
    {
     übergebeneFunktion(this->content,std::cout); //die Funktion wird aufgerufen
    }
    
    void myClass::print(???)
    {
     übergebeneFunktion(this->content,10,20); //die Funktion wird aufgerufen
    }
    

    Geht das mit Templates?
    Versteht man überhaupt was ich mein?

    mfG


  • Mod

    template <typename Callable>
    void print(Callable callable)
    {
        callable(this->content, std::cout);
    }
    

    ?



  • Ok, hab ein Fehler bei der Frage gemacht.

    void myClass::print(???)
    {
     übergebeneFunktion(this->content, übergebeneArgumente...); //die Funktion wird aufgerufen
    }
    

    Also der print Member soll immer nur den ersten Parameter angeben die anderen sind beim Aufruf des print Member angeben und werden quasi nur weitergeleitet.


  • Mod

    template <typename Callable, typename... Args>
    void print( Callable callable, Args&&... args )
    {
        callable( this->content, std::forward<Args>(args)... );
    }
    

    ?



  • Ok Danke.


  • Mod

    In Zukunft bitte aussagekräftige Threadtitel benutzen. Das Forum lebt davon, dass später jemand mit einem ähnlichen Problem den Thread anhand des Namens finden kann. "Geht das?" ist da denkbar ungeeignet. Besser wäre hier etwas wie "Kann man Funktionsargumente weiterleiten?".


Log in to reply