Funktion im Konstruktor



  • Kann ich einer Klasse eine Funktion im Konstruktor übergeben, so dass diese Funktion dann als Klassen-Methode aufrufbar ist?

    So etwas in der Art:

    class TuWas
    {
    public: 
      double tu(double x);  // sollte festgelegt sein
      (void*) was(voi*)   ;  // komplett freie Funktion
    
      TuWas( ... ) // mysteriöser Konstruktor
    };
    
    double foo(double x){return x*x;}
    double baz(void)    {return 42;}
    
    tuwas = TuWas(foo, baz).
    
    tuwas.tu(3.11)  // führt foo aus
    tuwas.was()     // führt  baz aus
    

    Eventuell auch noch mit Lmabda-Funktionen?



  • Ja. Ungefähr so

    class MyFunc
    {
    	typedef std::function<void()> FuncType;
    	FuncType func1, func2;
    
    public:
    	template<class F1, class F2>
    	MyFunc(F1 f1, F2 f2)
    	 : func1(f1), func2(f2)
    	{}
    
    	void exec()
    	{
    		func1();
    		func2();
    	}
    };
    
    void foo()
    {
    	std::cout << "Foo" << std::endl;
    }
    
    int main()
    {
    	MyFunc f(foo, [](){std::cout << "Lambda" << std::endl;});
    
    	f.exec();
    
    	return 0x0;
    }
    


  • Skym0sh0 schrieb:

    int main()
    {
    	…
    	return 0x0;
    }
    


  • volkard schrieb:

    Skym0sh0 schrieb:

    int main()
    {
    	…
    	return 0x0;
    }
    

    Troll-Admin at its best 😃



  • volkard meinte bestimmt, dass da noch Klammern fehlen.



  • return 0x0;
    

    halte ich für Schwachsinn.



  • return 0 in main() finde ich eh fragwürdig. Das kann man meiner Meinung nach schreiben, wenn man verschiedene Rückgabewerte hat und somit auch etwas ausdrückt, aber nicht wenn einem der Rückgabewert eh egal ist...



  • volkard schrieb:

    return 0x0;
    

    halte ich für Schwachsinn.

    Ich weis, das hast du schonmal zum Besten gegeben. Na und? Ist ne kleine Spielerei und hat keinerlei Effekt.

    Glaub ja nicht, dass ich sowas in jeder Funktion schreibe, die einen int zurückgibt. Das gehört höchstens dahin, wo es auf die Zahlenbasis ankommt.



  • Wozu?
    Um Nubes diesen Spleen zu impfen und irgendwann stolz drauf zu sein, daß Du in freier Wildbahn return 0x0 in der main siehst?



  • Nö, einfach so. Ich halte die Leute hier im Forum alle für so klug, dass sie wissen was diese eine Zeile bedeutet und für sich selbst entscheiden können, was sie dort brauchen oder wollen.



  • Ich raffs nich.



  • Skym0sh0 schrieb:

    Nö, einfach so. Ich halte die Leute hier im Forum alle für so klug, dass sie wissen was diese eine Zeile bedeutet und für sich selbst entscheiden können, was sie dort brauchen oder wollen.

    optimistische Annahme 😉



  • 😃

    Gehts jetzt eig um mich und mein return 0X0; oder um die Frage des TE's? Ich mein, ihr könnt das ja geflissentlich überlesen 😉



  • Hier im Forum schweift man oft von der eigentlich Frage ab, was das finden einer Antwort oft sehr erschwert.



  • ...



  • Mr. Long schrieb:

    Hier im Forum schweift man oft von der eigentlich Frage ab, was das finden einer Antwort oft sehr erschwert.

    Richtig, und nicht selten sind der Grund dafür Leute, die ihre "cleveren Hacks" wie 0x0 präsentieren müssen, nur um Einwände zu provozieren 😉



  • Swordfish schrieb:

    int main()
    { 
        return 0x2a;
    }
    

    ... und jetzt?

    Was jetzt?
    return 0x0 in main() ist deswegen auch nicht weniger Unsinn.



  • Nexus schrieb:

    Mr. Long schrieb:

    Hier im Forum schweift man oft von der eigentlich Frage ab, was das finden einer Antwort oft sehr erschwert.

    Richtig, und nicht selten sind der Grund dafür Leute, die ihre "cleveren Hacks" wie 0x0 präsentieren müssen, nur um Einwände zu provozieren 😉

    Nix clevere Hacks (es macht ja exakt... NICHTS...) und auch nix Provokation, wenn ich Aufmerksamkeit will, dann ruf ich bei den jungen grünen Männern an, die dann mit Partybeleuchtung Umgebungsbeschallung bei mir vorbeikommen und mich in ne Hab-Mich-Lieb-Jacke stecken. Effektiver wär das auch 😃



  • Skym0sh0 schrieb:

    volkard schrieb:

    Du tust mit dem Code so, als hätte es eine teifere Bewandtnis, als hätten die Einzelbits eine spezielle Bedeutung. Und jeder Leser stockt da erstmal und überlegt.

    Ok, 1:0 für dich 😞
    Ich machs eigentlich nur rein fürs Aussehen, hab meine IDE auch so eingestellt, dass Zahlenliterale pink sind 😉



  • Skym0sh0 schrieb:

    Nix clevere Hacks (es macht ja exakt... NICHTS...) und auch nix Provokation,

    Warum schreibst Du nicht einen cleveren Hack wie

    return 3/8;
    

    , wenn Du einen ganz besonderen Hingucker für "main beendet sich normal" haben magst?


Log in to reply