Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Вов и К, Вы писали:
ВИК>>У меня имелось несколько int и float переменных, которые я записывал в символьный массив примерно так:
ВИК>> char Msg[256];
ВИК>> sprintf(Msg, "%d %d %f %f",
ВИК>> m_nTemp1, m_nTemp2, m_fTemp3, m_fTemp4);
ВИК>>Теперь мне надо эти и еще несколько переменных и массивов запихнуть в структуру.
ВИК>>ВОПРОС: как полученную структуру перевести в символьный массив char Msg[256]?
К>В С++ для этих целей пользуются
К>(1) перегрузкой функций...
К>Например, для вывода в любой текстовый поток общепринято завести семейство операторов <<
К>К>std::ostream& operator<< (std::ostream& ostr, const YourType& t);
К>
К>тогда вывод структуры можно рекурсивно определить через вывод её полей
К>К>struct Foo
К>{
К> int x;
К> double y;
К> Bar z; // ещё какая-то структура
К> Buz t[10]; // и даже массив
К>};
К>inline std::ostream& operator<< (std::ostream& ostr, const Foo& foo)
К>{
К> ostr << "{ ";
К> ostr << x << " " << y << " " << z << " "; // предполагаем, что такой оператор есть и для Bar
К> std::copy(t,t+10, std::ostream_iterator<Buz>(ostr, " ")); // маленькая хитрость - копирование массива в поток
К> // превращается внутри в ostr << t[0] << " " << t[1] << " " ...
К> ostr << "}";
К> return ostr;
К>}
К>
К>(2) и полиморфными объектами
К>Если ты решился делать всё через потоки (благо, для них уже много чего имеется в STL), обрати внимание: всё семейство operator<< принимает слева ostream. Это базовый класс, наследники которого — файловые и консольные потоки, но не только. Один из них — ostringstream — всё выводимое коллекционирует в строку.
К>К>Foo foo;
К>std::ostringstream oss;
К>oss << foo;
К>std::string s = oss.str();
К>
прошу прощения за навязчивость. С вышеизложенным я разобрался. А как сделать обратную операцию из строкового потока в структуру. Куда считывать пробелв между элементами?