Re: Как перевести структуру в строковый буфер
От: Кодт Россия  
Дата: 06.04.05 16:18
Оценка: 1 (1)
Здравствуйте, Вов и К, Вы писали:

ВИК>У меня имелось несколько 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();
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.