Übergabe eines Vectors



  • Hey Leute,

    Diesemal würde ich gerne wissen wie ich einen Vector in einem parameter übergeben kann. Als Beispiel:

    Config::Config(const std::string& file, std::vector<std::string> content)
    {
        std::ofstream properties;
        properties.open(file);
        properties << content;
        properties.close();
    }
    
    new Config(blabla, "Test1",
                       "Test2"
    )
    

    Doch dieser Code funktioniert nicht. So ich weiss das dies für manche eine dumme frage ist würde mir jedoch sehr helfen.

    MFG Jonas



  • Mit geschweiften Klammern:

    Config conf(blabla, {"Test1", "Test2"});
    


  • Erkläre lieber mal, wieso du new und .close() verwendest.



  • Noch besser wäre die Übergabe als const Ref, dann sparst du das Kopieren



  • Du kannst auch auf das explizite Öffnen und Schließen der Datei verzichten, da das der Konstruktor und Destruktor des ofstream macht. Optimaler Weise sähe das dann so aus:

    Config::Config(const std::string& file, const std::vector<std::string>& content) 
    { 
        std::ofstream properties(file); 
        properties << content;  
    }
    


  • TNA schrieb:

    Optimaler Weise sähe das dann so aus:

    Config::Config(const std::string& file, const std::vector<std::string>& content) 
    { 
        std::ofstream properties(file); 
        properties << content;  
    }
    

    Ich bin nicht der Meinung, dass das optimal wäre, schon nur deshalb, weil sich ein Vektor nicht direkt ausgeben lässt.

    Vorschlag:

    template <typename Range>
    Config::Config(const char* path, const Range& content) 
    { 
        std::ofstream propfile(file);
        std::copy(std::ostream_iterator<typename Range::value_type>(propfile, "\n"), {}, content);
                                     // ^-------------------------
                                     // War das ein Oversight, oder wieso
                                     // gibt es in C++14 nicht keine
                                     // ostream_iterator<void>-Spezialisierung?
    }
    


  • Ich behaupte mal dass die Parameter für dein std::copy komplett falsch sind.



  • c++14-oversight? schrieb:

    Ich bin nicht der Meinung, dass das optimal wäre, schon nur deshalb, weil sich ein Vektor nicht direkt ausgeben lässt.

    Darum ging es nicht. Das die Ausgabe von Andreas W. nicht funktioniert ist eine andere Baustelle. Deine Lösung funktioniert zudem auch nicht.


Log in to reply