Рассмотрим следующий фрагмент кода
class tmp1
{
const int a_;
const double b_;
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int ver)
{
ar & a_ & b_ ;
}
public:
tmp1(const itype a , const ftype b) : a_(a), b_(b)
{}
};
Я могу записать объект в файл, выполнив
tmp1 t1(2, 10.0);
std::string filename ="D:/Temp/demofile.txt";
std::ofstream ofs(filename);
boost::archive::text_oarchive oa(ofs);
oa<<t1;
Я хотел бы создать другой экземпляр tmp1
, прочитавфайл.В идеале я хотел бы, чтобы это происходило во втором конструкторе, который берет имя файла и создает его.Как мне это сделать?
Я пытался
tmp1 t2(10, 100.0);
std::ifstream ifs(filename);
boost::archive::text_iarchive ia(ifs);
ia>>t2;
, но компиляция VS2012 не удалась со следующим сообщением
archive/detail/check.hpp(162): error C2338: typex::value
4> \boost\boost_1_67_0\boost/archive/detail/iserializer.hpp(611) : see reference to function template instantiation 'void boost::archive::detail::check_const_loading<T>(void)' being compiled
4> with
4> [
4> T=const itype
4> ]
, которое я предполагаю из-за членов const
.Я думал, что boost отбросит квалификатор const, но, похоже, это не так.