Portál AbcLinuxu, 13. července 2025 06:31


Dotaz: Stringstreamy z C++

12.5.2009 23:41 Dušan Renát | skóre: 4
Stringstreamy z C++
Přečteno: 386×
Odpovědět | Admin
void LocalGameSocket::send(const std::string & data) {
        list< Action> plan;
        Action action;
        char delimiter;
        stringstream ss(data);
        ss >> delimiter;
        while (ss >> action) {
                plan.push_back(action);
                ss >> delimiter;
        }
        ...
}
Takhle vypadá jedna z metod, která mě přesvědčila, že nevím, jak vlastně fungují stringstreamy. To, co chci, je z kódu asi jasně vidět - Action je moje vlastní třída a má přetížený globální operátor >> pro načtení sebe sama z istreamu. Tenhle operátor nevrací jak je obvyklé odkaz na ten istream, aby se dal řetězit, ale vrací pravdu, pokud se načtení povedlo, a nepravdu, pokud ne. Takže co chci ... načíst ze stringu "data" posloupnost "Action", které jsou oddělené jednoznakovým oddělovačem (proto delimiter). Tohle skončí v nekonečné smyčce, ten operátor načítá stále tu stejnou (první) položku. Proč to dělá a jak to opravím?
Ještě dodám, že ten můj operátor je implementovaný voláním toho stejného operátoru postupně na členy třídy Action.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.5.2009 02:25 joe
Rozbalit Rozbalit vše Re: Stringstreamy z C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
Příloha:
A jak máš ten operátor napsaný? Mně to bez problému funguje (viz. příloha).
13.5.2009 11:17 Dušan Renát | skóre: 4
Rozbalit Rozbalit vše Re: Stringstreamy z C++
Díky za pomoc. Problém byl naprosto začátečnickej: Na konci toho řetězce už není co načítat, takže operátor >> nic neinicializoval. Bohužel v něm byl switch, který reagoval podle prvního načteného bytu -> podle starých dat.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.