Информация об изменениях

Сообщение Re[3]: константа и не константа одновременно(почти) от 08.05.2015 10:09

Изменено 08.05.2015 10:11 niXman

Здравствуйте, sokel, Вы писали:

S>Т.е. один тип аксессора на serialize/deserialize? А не проще пару было сделать const — не const?

S>Тогда бы честный был serialize(Archive &) const и deserialize(Archive&).

YAS поддерживает такие способы сериализации/десериализации:
yas::mem_ostream os;
yas::binary_oarchive<yas::mem_ostream> oa(os);

struct usertype {};
usertype u;

// 1: one free function for read/write
template<typename Archive>
void serialize(Archive &ar, usertype &v) {
   oa & v;
}

// 2: separate free functions
template<typename Archive>
void serialize(Archive &ar, const usertype &v) { // write
   oa & v;
}
template<typename Archive>
void serialize(Archive &ar, usertype &v) { // read
   oa & v;
}

// 3: one member function for read/write
struct osertype2 {
   int a, b;

   template<typename Archive>
   void serialize(Archive &ar) {
      oa & a
         & b;
   }
};


// 4: separate member function for read/write
struct osertype2 {
   int a, b;

   template<typename Archive>
   void serialize(Archive &ar) const { // write
      oa & a
         & b;
   }
   template<typename Archive>
   void serialize(Archive &ar) { // read
      oa & a
         & b;
   }
};


// ну и такое недавно добавил по просьбам пользователей:

int a, b;
oa(a, b); // operator(...)
oa.serialize(a, b);

}
Здравствуйте, sokel, Вы писали:

S>Т.е. один тип аксессора на serialize/deserialize? А не проще пару было сделать const — не const?

S>Тогда бы честный был serialize(Archive &) const и deserialize(Archive&).

YAS поддерживает такие способы сериализации/десериализации:
yas::mem_ostream os;
yas::binary_oarchive<yas::mem_ostream> oa(os);

struct usertype {};
usertype u;

// 1: one free function for read/write
template<typename Archive>
void serialize(Archive &ar, usertype &v) {
   ar & v;
}

// 2: separate free functions
template<typename Archive>
void serialize(Archive &ar, const usertype &v) { // write
   ar & v;
}
template<typename Archive>
void serialize(Archive &ar, usertype &v) { // read
   ar & v;
}

// 3: one member function for read/write
struct osertype2 {
   int a, b;

   template<typename Archive>
   void serialize(Archive &ar) {
      ar & a
         & b;
   }
};


// 4: separate member function for read/write
struct osertype2 {
   int a, b;

   template<typename Archive>
   void serialize(Archive &ar) const { // write
      ar & a
         & b;
   }
   template<typename Archive>
   void serialize(Archive &ar) { // read
      ar & a
         & b;
   }
};


// ну и такое недавно добавил по просьбам пользователей:

int a, b;
ar(a, b); // operator(...)
ar.serialize(a, b);

}