Was fehlt in C++11?



  • Nexus schrieb:

    Interessant, dass noch niemand Reflection und Garbage Collector erwähnt hat... Wäre wohl anders, wenn dieses Thema in Rund um die Programmierung eröffnet worden wäre 😉

    Nagut. Mit Reflection geht's auch, wenn man sich ein wenig Mühe gibt.

    if(auto mf=Reflector(base)->getMemFun("flyLikeADerived"))
       if(mf->parameterlist.count()==0 && mf->returntype().name()=="void")
         static_cast<Derived>(base)->flyLikeADerived();
    


  • Nexus schrieb:

    Interessant, dass noch niemand Reflection und Garbage Collector erwähnt hat

    Jetzt wo dus erwähnst.. Runtimereflection und GC hat für mich mehr Nachteile als Vorteile, aber Compiletimereflection wäre wirklich etwas feines.



  • ipsec schrieb:

    Runtimereflection und GC hat für mich mehr Nachteile als Vorteile [...]

    Prinzipiell geb ich dir recht, ich halte RAII auch für ein bei weitem überlegenes Konzept. Allerdings hat das in Sprachen wie C# imo seine Berechtigung, damit entwickelt es sich sich zugegeben schon sehr viel schneller und einfacher. Reflection hab ich noch nie vermisst, die würd mir wohl nichtmal in C# wirklich abgehn...

    Was ich letztens wieder hatte wo ich mir dachte das wär nice to have: Baut doch bitte mal jemand was ein um bei verschachtelten Schleifen ein break über mehrere Ebenen zu machen. Natürlich kann man mit irgendwelchen Flags arbeiten oder die innere Schleife in eine Funktion packen, aber wenn der Schleifenkörper einfach nur ein Ausdruck is der aber 40 lokale Variablen benötigt dann ist das anstrengend...



  • ipsec schrieb:

    Nexus schrieb:

    Interessant, dass noch niemand Reflection und Garbage Collector erwähnt hat

    Jetzt wo dus erwähnst.. Runtimereflection und GC hat für mich mehr Nachteile als Vorteile, aber Compiletimereflection wäre wirklich etwas feines.

    Ja.
    Wobei die häufigste Anwendung wohl mit decltype, sizeof und alignof gelöst sind und viele weitere mit TMP incl SFINAE wie bei http://www.c-plusplus.net/forum/288521



  • dot schrieb:

    Was ich letztens wieder hatte wo ich mir dachte das wär nice to have: Baut doch bitte mal jemand was ein um bei verschachtelten Schleifen ein break über mehrere Ebenen zu machen...

    Da nimmste return. break2 ist was für PHP.



  • dot schrieb:

    aber wenn der Schleifenkörper einfach nur ein Ausdruck is der aber 40 lokale Variablen benötigt dann ist das anstrengend...

    40 lokale Variablen, die nicht in logisch zu Strukturen zusammengefaßt sind.



  • Ach, ja gut 40 war etwas übertrieben. Aber auch wenns nur 3 sind isses manchmal einfach blöd immer ne Funktion zu schreiben :p
    Aber gut man kann ja jetzt einfach ein Lambda hinmachen^^



  • Für sowas gibt es doch das named loop idiom. 😉

    An so einfache Dinge wie pi habe ich jetzt gar nicht gedacht. Vielleicht überhaupt eine Ansammlung an mathematischen, physikalischen und anderen Konstanten oder sowas.

    Wie siehts aus mit Dingen wie Shared Memory, GPU Berechnungen, RMI, ...



  • 314159265358979 schrieb:

    [...] GPU Berechnungen [...]

    http://channel9.msdn.com/posts/Daniel-Moth-Blazing-fast-code-using-GPUs-and-more-with-C-AMP 😉
    Aber ich find nicht dass sowas in den C++ Standard gehört...



  • ipsec schrieb:

    Ich sehe nicht, dass die RTTI-Möglichkeiten in C++ nicht "gescheit" sind.

    Ach komm, dann musst du blind sein. Unter RTTI verstehe ich, dass man z.B. von einer Klasse die Member, den Namespace, die BaseClass usw. zur Laufzeit ermitteln lassen und darauf zugreifen kann. typeid ist dagegen ein Witz, soll man ja sowieso nicht verwenden.

    wxSkip schrieb:

    @StellerFragen: Vielleicht willst du so etwas? (ist halt nur ein Nachbau, ungetestet)

    So ähnlich habe ich das, funktioniert auch aber ist halt sehr Fehleranfällig da man die dort gespeicherten Angaben nach einer Änderung der Klasse schnell mal vergisst zu aktualisiert.



  • StellerFragen schrieb:

    Unter RTTI verstehe ich, dass man z.B. von einer Klasse die Member, den Namespace, die BaseClass usw. zur Laufzeit ermitteln lassen und darauf zugreifen kann.

    Damit stehst du aber allein. RTTI ist in C++ bereits ein festgelegter Begriff, der primär typeid und dynamic_cast sowie das Exception-Dispatching beinhaltet.

    Verwende doch "Reflection" oder was Ähnliches, wenn du von umfassender Metaprogrammierung zur Laufzeit sprichst.



  • StellerFragen schrieb:

    So ähnlich habe ich das, funktioniert auch aber ist halt sehr Fehleranfällig da man die dort gespeicherten Angaben nach einer Änderung der Klasse schnell mal vergisst zu aktualisiert.

    Das versteh ich nicht, du kannst genausogut vergessen deinen statischen Konstruktor zu aktualisieren, macht doch absolut 0 Unterschied!?



  • StellerFragen schrieb:

    wxSkip schrieb:

    @StellerFragen: Vielleicht willst du so etwas? (ist halt nur ein Nachbau, ungetestet)

    So ähnlich habe ich das, funktioniert auch aber ist halt sehr Fehleranfällig da man die dort gespeicherten Angaben nach einer Änderung der Klasse schnell mal vergisst zu aktualisiert.

    Und in C# vergisst du das nicht? Meistens muss man statische Variablen ja sowieso nicht mehr als mit dem Konstruktor initialisieren und RAII sollten sie sowieso haben.

    P.S.: Ich hätte noch eine Möglichkeit.

    Du baust dir eine Template-Klasse RAIIManager<T>, mit der du folgendes machst:

    //Header
    class MyClass
    {
        static Resource res;
        static RAIIManager<Resource> res_manager;
    };
    
    //Source
    static Resource Myclass::res;
    static RAIIManager<Resource> Myclass::res_manager(Myclass::res, [](Resource &r){r.request();}, [](Resource &r){r.release();});
    

    EDIT: Vielleicht gibt es ja in C# eine Fehlermeldung, wenn man nicht alle statischen Member initialisiert.



  • wxSkip schrieb:

    Und in C# vergisst du das nicht?

    Nein, dort werden die Informationen wie Membername, Namespacename usw. ja automatisch hinzugefügt.
    Bei C++ muss ich all die Informationen per Hand zur Verfügung stellen.



  • Sry aber: Hä!?



  • Von der IDE wahrscheinlich.



  • Ja vermutlich aber das hat mit C++ doch nix zu tun. Abgesehen davon dass jede mir bekannte C++ IDE das genauso macht...



  • dot schrieb:

    Ja vermutlich aber das hat mit C++ doch nix zu tun. Abgesehen davon dass jede mir bekannte C++ IDE das genauso macht...

    Aber nicht bei selbst gebastelten Hilfs-RAII-Klassen, oder?



  • Warum nicht?



  • dot schrieb:

    Warum nicht?

    Vielleicht, weil die IDE nicht weiß, dass du alle statischen Member einer anderen Klasse aufgelistet haben willst?


Anmelden zum Antworten