Привет всем!
У меня ошибка — не могу понять почему.
Открываю текстовый поток и передаю его как shared_ptr<ifstream> функции, которая должна загрузить из этого потока один из объектов. Пробую загрузить один из объектов, если не получается то другой.
Выглядит это так
spIobject loader(sp_ifstream ifs)
{
spIobject res;
spOneObject oo;
spAnotherObject ao;
try{
oo = OneObject::load( *ifs );
}
catch( ... )
{
}
if( oo.use_count() == 0 )
{
try{
ao = AnotherObject::load( *ifs );
}
catch( ... )
{
}
}
else
res = oo;
return res;
}
Где типы определены следующим образом: spТип — boost::shared_ptr<Тип> ,
class Iobject
{
...
};
class OneObject : protected Iobject
{
friend spIobject loader(sp_ifstream ifs);
...
};
class AnotherObject : public Iobject
{
};
В функциях загрузки сохраняю позицию в потоке и, если не могу загрузить объект, то восстанавливаю прежнюю позицию.
Не пойму в чем косяк. Когда-то слышал, что у текстовых потоков seekg() не работает, но на упрощенном тестовом примере эта функция одинаково показала себя в текстовом и двоичном режимах.
Вправьте мне мозги, плииз
Заранее спасибо!