Уже давно хотел написать, так как вопрос несколько раз поднимался. Итак, кроссплатформенный вариант преобразования переменных различного типа в строку и обратно.
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
class my_class{
int a;
float b;
public:
my_class()
{
this->a = 0;
this->b = 0;
}
my_class(int a,float b)
{
this->a = a;
this->b = b;
}
friend ostream& operator << (ostream& os,my_class tmp)
{
os<<"\nHere we have class members:\n a = "<<tmp.a<<"\n b = "<<tmp.b;
return os;
}
};
int main(int argc,char** argv)
{
string str = "123 123.999 some_text";
int i_val = 0;
double d_val = 0;
string s_val;
// Создаем поток и инициализируем его нужной нам строкой
istringstream is_stream(str);
// Проверка, открылся ли поток
if(!is_stream)
{
cout<<"Error!\n";
return -1;
}
// Читаем и преобразуем значения из строки в переменные нужного нам типа
is_stream>>i_val>>d_val>>s_val;
// Смотрим что получилось
cout<<i_val<<" "<<d_val<<" "<<s_val<<endl;
ostringstream os_stream;
my_class mc = my_class(99,99.99f);
if(!os_stream)
{
cout<<"Error!\n";
return -1;
}
// Теперь, произведем противоположенное действие и сформируем из переменных разного типа строку
os_stream<<i_val<<" "<<d_val<<" "<<s_val<<" "<<mc;
cout<<os_stream.str()<<endl;
}