std::initializer_list mit referenzen



  • Moin,

    ich würde gerne viele und große Vektoren an eine Funktion übergeben. std::initializer_list scheint aber nicht mit Referenzen arbeiten zu können, ohne vector-Referenz funktioniert es, nur leider habe ich da Bedenken bzgl. der Effizienz bei größeren Datenmengen.

    Folgende Meldung gibt mir gcc 4.7.2:

    error: forming pointer to reference type 'const std::vector<float>&'
    
    void foo(std::initializer_list<const std::vector<float>&> values) 
    {
        // ...
    }
    
    int main()
    {
        std::vector<float> x {1,2,3,4};
        std::vector<float> y {7,8,9,10};
    
        foo({x,y});
    }
    


  • Zeiger?



  • Ist das nicht ein Missbrauch von

    std::initializer_list
    

    ?

    std::initializer_list
    

    ist nicht dazu gedacht, ein Container zu ersetzen. Das hier wär doch eher was für variadic templates .



  • @out: Danke, so gehts. Muss mich in den neuen Standard noch einarbeiten.

    void bar() {}
    
    template <typename ...Tail>
    void bar(const std::vector<float>& head, Tail ...tail)
    {
        //do something with head
        bar(tail...);
    }
    
    int main()
    {
        std::vector<float> x {1,2,3,4};
        std::vector<float> y {7,8,9,10};
        bar(x,y);
    }
    


  • void bar(const std::vector<float>& head, Tail const& ...tail)
    

    Du willst doch schließlich die Kopie sparen...?


Anmelden zum Antworten