рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдХреЛрдИ рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо рдмреЗрдХрд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
C ++ рдореЗрдВ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, I / O рд╕реНрдЯреНрд░реАрдо рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЬреЛ рдорд╛рдирдХ
IOStream рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИрдВред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рдн рд╣реИрдВ:
- рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХрддрд╛: рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдзрд╛рд░рд╛ рдХрд┐рд╕рд╕реЗ рдЬреБрдбрд╝реА рд╣реИ - рдХрдВрд╕реЛрд▓, рдлрд╝рд╛рдЗрд▓, рд╕реЙрдХреЗрдЯ рд╕реЗ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рди рд╣реИ;
- рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛: рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдирдкреБрдЯ рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ;
- рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА: рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдореЗрдВ I / O рд╕рдкреЛрд░реНрдЯ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдмрд╕ рд╕рдВрдмрдВрдзрд┐рдд рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдХреЗред
IOStream рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ
stringstream
рдХреНрд▓рд╛рд╕ рднреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдРрд╕реА рдзрд╛рд░рд╛ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ; рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдкрдврд╝реА рдЧрдИ рд╕рднреА рдЪреАрдЬреЗрдВ рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИрдВред
рдпрд╣ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдм рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдк рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
#include <sstream> #include <iostream> int main(int argc, char* argv[]) { std::stringstream ss; ss << "22"; int k = 0; ss >> k; std::cout << k << std::endl; return 0; }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрдЯрд┐рд▓ рддрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
void func(int id, const std::string& data1, const std::string& data2) { std::stringstream ss; ss << "Operation with id = " << id << " failed, because data1 (" << data1 << ") is incompatible with data2 (" << data2 << ")"; std::cerr << ss.str(); }
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ
stringstream
рдЙрдкрдпреЛрдЧ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрджреЗрд╢ рд╕реАрдзреЗ
cerr
рдЖрдЙрдЯрдкреБрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рд╕рдВрджреЗрд╢ рдХреЛ рдорд╛рдирдХ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдЧ рдореЗрдВ рд╕рдВрджреЗрд╢ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
syslog()
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП? рдпрд╛, рдпрд╣ рдХрд╣реЗрдВ рдХрд┐ рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдлреЗрдВрдХреЗрдВ:
void func(int id, const std::string& data1, const std::string& data2) { std::stringstream ss; ss << "Operation with id = " << id << " failed, because data1 (" << data1 << ") is incompatible with data2 (" << data2 << ")"; throw std::runtime_error(ss.str()); }
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА
stringstream
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ
str()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╕рд╣рдордд, рднрд╛рд░реА?
рд╕реА ++ рдХреЛ рдХрднреА-рдХрднреА рдЗрд╕рдХреА рдЕрддреНрдпрдзрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдЕрддрд┐рд░реЗрдХ рдХреЗ рд▓рд┐рдП рджреЛрд╖реА рдард╣рд░рд╛рдпрд╛
рдЬрд╛рддрд╛ рд╣реИ , рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╣реА рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдбрд┐рдЬрд╛рдЗрди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рдЕрдм,
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░
рдУрд╡рд░рд▓реЛрдб рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдХреНрд╖рдорддрд╛ рдиреЗ рдореБрдЭреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧрд╕реНрдЯреНрд░реАрдо рдкрд░ рдПрдХ рд░реИрдкрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреА, рдЬреЛ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░ рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рднреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдореИрдВ рдПрдХ рдзрд╛рд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд░рд╣рд╛ рдерд╛:
void func(int id, const std::string& data1, const std::string& data2) { throw std::runtime_error(MakeString() << "Operation with id = " << id << " failed, because data1 (" << data1 << ") is incompatible with data2 (" << data2 << ")"); }
рдФрд░ рдпрд╣рд╛рдБ
MakeString
рдЦреБрдж рд╣реИ:
class MakeString { public: template<class T> MakeString& operator<< (const T& arg) { m_stream << arg; return *this; } operator std::string() const { return m_stream.str(); } protected: std::stringstream m_stream; };
рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рдУрд░,
MakeString
рд╡рд░реНрдЧ рдореЗрдВ,
MakeString
рдСрдкрд░реЗрдЯрд░ (<<) рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рдВрджрд░реНрдн рд▓реЗрддрд╛ рд╣реИ, рддреБрд░рдВрдд рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ
stringstream
рдФрд░ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджреЗрддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдСрдкрд░реЗрдЯрд░ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛
stringstream
рд╕реНрдЯреНрд░рд┐рдВрдЧ
stringstream
ред
рд╢рд╛рдпрдж рдпрд╣ рдЖрд╡рд░рдг рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ, рд╕реБрдЭрд╛рд╡реЛрдВ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рд╕реБрдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред