• [^] # Re: cin trop limité

    Posté par (site web personnel) . En réponse au message cin >> string. Évalué à 2.

      std::istream::getline n'existe pas. C'est une illusion d'optique. Oublie l'existence de ce truc tout pourri.
      Par contre, avec std::getline, c'est différent.
      La solution à la main:
    std::string id, line;
    if ((line >> id) && (std::getline(std::cin, line))) {
     if (id == "EXIT") {
     if ( ! line.empty()) throw ....
     } elseif (id == "toto") {
     std::istringstream iss(line);
     float f1, f2; int i3;
     if ( ! (line >> f1 >> f2 >> i3)) throw ...
     do_toto(f1, f2, i3);
    ......
      Autant dire que la gestion des erreurs complique vite la sauce.
      Il y a aussi des solutions pour utiliser des parsers (lex/yacc si tu es courageux, boost.spirit si ce que tu dois parser est simple, ANTLR, ....)
      Enfin, ton problème me fait penser aux chain-factories. Tu pourrais ainsi créer ta commande à la volée et l'exécuter par la suite.
      PS: Les flux n'ont jamais fait parti de la STL (qui n'est qu'une appellation historique pour un sous-ensemble de la SL du C++). Ils sont dans la SL.