almire a écrit 2 commentaires

  • # Assimilation forcée

    Posté par  . En réponse à la dépêche systemd versions 212 à 215. Évalué à -9.

    Vraiment triste que son usage s'impose comme la norme, par suivisme de DeadRat, dans les distributions principales, avec les problèmes fondamentaux qu'il entraîne.

    Beaucoup de propagande pour présenter systemd comme une rupture et un progrès inéluctables, et une mise à l'écart malsaine et malhonnête des nombreuses alternatives sensées.

    http://boycottsystemd.org

  • # std::stringstream

    Posté par  . En réponse au message équivalent sprintf. Évalué à 1.

    sprintf() est bien sur utilisable en C++, mais les streams de la STL le remplace avantageusement.

    au passage, sprintf() ne devrait jamais etre utilise car on ne peut pratiquement jamais predire la taille de la chaine resultante. snprintf() le garantit mais le resultat risque d'etre tronque.

    je ne suis pas sur de comprendre ce que tu veux d'apres ton exemple, mais comme sprintf() sert a formatter une chaine en memoire plutot que vers un fichier, je suppose qu'il te faut utiliser la classe stringstream de la STL. elle possede entre autres la propriete d'un ostream et genere la chaine formatee dans un string sous-jacent auquel on accede par la methode str(). l'utilisation classique est :

    #include <sstream>
    ...
    std::stringstream s;
    s << "message bidon : le vecteur possede " << v.size() << " elements\n";
    string msg = s.str();

    tous les types T auxquels correspond un operateur "std::ostream & operator << (std::ostream &, const T &)" (ce qui est le cas des types primitifs bool, int, const char *, etc.) peuvent ensuite etre utilises de la sorte. c'est en general une bonne alternative a une methode toString() qui alourdi le code inutilement.

    par exemple,

    class host {
    ...
    public :
    const string &name() const;
    bool state() const;
    };

    std::ostream & operator << (std::ostream &o, const host &h)
    {
    return o << "host " << h.name() << " (" << (h.state() ? "up" : "down") << ")";
    }

    void timeout(const host &h)
    {
    std::stringstream s;
    s << h << " is not responding\n" "abort ?";
    popup(s.str());
    }

    a noter que la classe ostrstream est obsolete.