"using" auf Objekt um es in den scope einzubinden möglich?



  • ...



  • Swordfish schrieb:

    Fischereibetrieb schreibt man zusammen.

    Ja, tut man. Das war...
    Ach, egal.



  • ...


  • Mod

    Vorsichtig.

    Hihi, ein Möchtegern.

    Kannst du mich fachlich noch übertreffen? 🙂



  • ...



  • Arcoth schrieb:

    Ist diese Syntax angenehm?

    Edit: Die Syntax ist akzeptabel* - nur ist deine Lösung furchtbar. Vor allem weil sie schon bei Templates aussteigen sollte.

    Bitte genauer spezifizieren: Wer Methoden aufruft, bei denen zwei oder mehr Template-Argumente explizit angegeben werden müssen, hat unter Umständen Schwierigkeiten. Durchschnittliche Auftritte pro 1000 Zeilen Sourcecode: 0.00.

    Aber auch, weil WITH(v, push_back(1)); schon nicht mehr funktioniert.

    Oh wie schrecklich, WITH mit einem Argument war der Hauptanwendungszweck!!!
    Lässt sich trivial anpassen, falls das wirklich jemand braucht.

    Zeig erstmal die Boost.PP-Lösung.

    Das bisschen Makrogedöns ist mit der Skriptsprache deiner Wahl (!=C++) mit einem Einzeiler generiert.

    * Es wird mit dieser Syntax jedoch das Template-Argument Problem nie gelöst.

    Methodenaufrufe mit expliziten Template-Argumenten (sogar Mehrzahl!) kommen so selten vor, dass dafür die Syntax im General Case zu verschlimmern nicht für mich nicht vertretbar ist.

    Arcoth schrieb:

    Warum das with-statement übrigens zu einem Ausdruck werden soll, ist mir unklar - ein compound-statement reicht doch?

    Wegen dem im Gegensatz zu Template-Argumenten normalen Use-Case:

    A v;
        if (rand()%2)
          WITH( v,
               (f<4,5>()),
               (f<51, 8, 7>()) ); // das Semikolon ist das Problem
        else
          WITH( v,
               (f<4,6>()),
               (f<51, 5, 7>()) );
    

  • Mod

    Wer Methoden aufruft, bei denen zwei oder mehr Template-Argumente explizit angegeben werden müssen, hat unter Umständen Schwierigkeiten.
    [...] Methodenaufrufe mit expliziten Template-Argumenten (sogar Mehrzahl!) kommen so selten vor, dass dafür die Syntax im General Case zu verschlimmern nicht für mich nicht vertretbar ist.

    Genau - bei der ursprünglichen Definition!

    Nun lass uns mal ein Zeichen ändern:

    #define DO_CALL(_, d, call) (d) VARIADIC_IDENTITY call ;
    

    Dieses Feature ist gar nicht ausschließlich für Funktionen ausgelegt. Und daher kann folgendes mitunter auftreten:

    WITH( Resolver<value_type, Args...>:: template,
    	     (    parser<T, U>::parse(stream)),
    	     (ray_parser<T, U>::parse(stream)) );
    

    !=C++

    Wir sind in einem Standard-C++ Board. Es interessiert keine Skriptsprache.
    (Mit Boost.PP kann es ein Zweizeiler werden, ist dann aber nicht ganz so hübsch wie meine Variante - verwendet BOOST_PP_TUPLE_REM und BOOST_PP_TUPLE_SIZE )

    Edit: Übrigens, hast du gemeint du könntest die Makro-Definitionen mit einer Skript-Sprache verkürzen?

    das Semikolon ist das Problem

    Und genau das Semikolon sollste doch gar nicht hinschreiben. Oder ist das so irreführend und ambig?
    (Ich bin nur ein ganz klein wenig skeptisch ob das Lambda vollständig geinlined wird 🙂 )


  • Mod

    Arcoth schrieb:

    (Ich bin nur ein ganz klein wenig skeptisch ob das Lambda vollständig geinlined wird 🙂 )

    Clang 3.4 optimiert ab -O2, GCC 4.9 ab -O. Genügt, oder?


Anmelden zum Antworten