vector intialisierung



  • pumuckl schrieb:

    In C++98:

    const static string test_src[] = {"a", "b", "c"};
    template <class T, unsigned N>
    inline unsigned countof(T(&)[N]) {return N;}
     
    vector<string> test(test_src, test_src+countof(test_src));
    

    Ist das im Gegensatz zu meiner Variante nicht ein wenig Overkill?



  • Sone schrieb:

    pumuckl schrieb:

    In C++98:

    const static string test_src[] = {"a", "b", "c"};
    template <class T, unsigned N>
    inline unsigned countof(T(&)[N]) {return N;}
     
    vector<string> test(test_src, test_src+countof(test_src));
    

    Ist das im Gegensatz zu meiner Variante nicht ein wenig Overkill?

    Kommt drauf an, wie oft du es in deinem Programm brauchst. Wenn es öfters gebraucht wird, lager es aus... Abstraktion.



  • out schrieb:

    Sone schrieb:

    pumuckl schrieb:

    In C++98:

    const static string test_src[] = {"a", "b", "c"};
    template <class T, unsigned N>
    inline unsigned countof(T(&)[N]) {return N;}
     
    vector<string> test(test_src, test_src+countof(test_src));
    

    Ist das im Gegensatz zu meiner Variante nicht ein wenig Overkill?

    Kommt drauf an, wie oft du es in deinem Programm brauchst. Wenn es öfters gebraucht wird, lager es aus... Abstraktion.

    Na und? Der Template-Kram ist nach wie vor Overbloat/kill:

    #define count(arr) (sizeof (arr) / sizeof (*arr))
    


  • void foo(int bar[2])
    {
            cout << count(bar);
    }
    

    C laesst gruessen.



  • Kellerautomat schrieb:

    void foo(int bar[2])
    {
            cout << count(bar);
    }
    

    C laesst gruessen.

    Schon klar, aber wenn der Programmierer so ein Idiot ist, soll er das Makro auch nicht benutzen.



  • Na und? Der Template-Kram ist nach wie vor Overbloat/kill:

    Hmm ... ich mag die zwei Zeilen. Der Compiler sollte es zur Konstanten reduzieren. Von Overkill kann nicht die Rede sein.



  • knivil schrieb:

    Der Compiler sollte es zur Konstanten reduzieren.

    Na gut, das ist natürlich schön.

    Btw, jetzt gehts auch mit Fehlererkennung: 🤡

    #include <type_traits>
    #include <stdexcept>
    
    #define count(arr) (std::is_array<decltype(arr)>::value ? sizeof (arr) / sizeof (*arr) : (throw std::logic_error("Wrong type."), 0))
    


  • Erstmal vielen Dank für die Hilfe.

    Leider scheint VS 2012

    std::vector<std::string> test = { "a", "b", "c" };
    

    ... nicht zu unterstützen. Ich bekomme folgende Fehlermeldung:

    Initialisierung nicht zusammengesetzter Typen mit Initialisierungsliste ist nicht möglich.

    Kann man das irgendwie beheben? Ansonsten mache ich es halt mit einer der anderen vorgeschlagenen Lösungen.



  • asfsafsaf schrieb:

    Kann man das irgendwie beheben?

    - GCC oder CLANG benutzen (VS11 unterstützt das wie man sieht noch nicht)
    - auf MSVC 2015 warten 😉



  • Sone schrieb:

    Btw, jetzt gehts auch mit Fehlererkennung

    Du hast den Sinn von exceptions noch nicht verstanden, stimmts? 🤡



  • pumuckl schrieb:

    asfsafsaf schrieb:

    Kann man das irgendwie beheben?

    - GCC oder CLANG benutzen (VS11 unterstützt das wie man sieht noch nicht)
    - auf MSVC 2015 warten 😉

    Nö, Gott sei dank nich. Sie wollen zukünftig weitere C++11 Features in VS11 integrieren. Ob das mit verschiedenen Updates einhergehen wird oder mit einem SP, weiß ich nicht, dazu wurde keine Aussage gemacht.



  • roflkopter schrieb:

    Sone schrieb:

    Btw, jetzt gehts auch mit Fehlererkennung

    Du hast den Sinn von exceptions noch nicht verstanden, stimmts? 🤡

    Äh, ich glaub schon. Das war, und das hättest du mit kontextbezogenerem Lesen auch gemerkt, als Späßle gemeint.



  • out schrieb:

    Nö, Gott sei dank nich. Sie wollen zukünftig weitere C++11 Features in VS11 integrieren.

    Na gut, aber mit welchem Tempo? Dann halt VS11, Servicepack 18 (kommt 2015 raus) 😛



  • pumuckl schrieb:

    out schrieb:

    Nö, Gott sei dank nich. Sie wollen zukünftig weitere C++11 Features in VS11 integrieren.

    Na gut, aber mit welchem Tempo? Dann halt VS11, Servicepack 18 (kommt 2015 raus) 😛

    Ja schon :D. Zu den weiteren Features zählen übrigens, initializer list, template aliases, variadic templates, constexpr, noexcept =default und delete. Weihnachten is ja bald 😃



  • out schrieb:

    Ja schon :D. Zu den weiteren Features zählen übrigens, initializer list, template aliases, variadic templates, constexpr, noexcept =default und delete. Weihnachten is ja bald 😃

    Jau wünsch dir was. Und es gibt Stricksocken...



  • out schrieb:

    pumuckl schrieb:

    out schrieb:

    Nö, Gott sei dank nich. Sie wollen zukünftig weitere C++11 Features in VS11 integrieren.

    Na gut, aber mit welchem Tempo? Dann halt VS11, Servicepack 18 (kommt 2015 raus) 😛

    Ja schon :D. Zu den weiteren Features zählen übrigens, initializer list, template aliases, variadic templates, constexpr, noexcept =default und delete. Weihnachten is ja bald 😃

    Lol, GCC unterstützt alles. 😃
    Und bitte die richtigen Fachausdrücke benutzen. 🙂

    Übrigens wusste ich nicht, dass "übrigens" ein C++11-Feature ist XD



  • Sone schrieb:

    [Lol, GCC unterstützt alles. 😃
    Und bitte die richtigen Fachausdrücke benutzen. 🙂

    Übrigens wusste ich nicht, dass "übrigens" ein C++11-Feature ist XD

    Ja wie das Komma da hingekommen ist, weiß ich auch net. 🤡 Ja der GCC, ich mag aber meine VS IDE. 😋

    /edit pumuckl: die folgende Diskussion über GCC unter Visual Studio findet sich im Compiler/IDE-Forum... http://www.c-plusplus.net/forum/308206


Anmelden zum Antworten