она разработана таким образом, чтобы вы могли передать ему нагрузочный или спасательный объект, а затем написать единую функцию шаблона для вашего класса, который примет либо нагрузку, либо Savearchive: этот способ (написанная один раз) будет читать или написать объект из файла.
Код: Выделить всё
class LoadArchive {
public:
template
void operator()(char const* fieldName, F& field ); // read field from archive
template struct DataRefType { typedef Data& type; };
};
class SaveArchive {
public:
template
void operator()(char const* fieldName, F const& field); // write field to archive
template struct DataRefType { typedef Data& type; };
};
// This allows to write a single transfer function for an object as follows
struct ObjectX {
int AA;
std::string BB;
};
template // read from LoadArchive or write to SaveArchive
void transfer(Archive& arc, typename Archive::DataRefType::type d) //###
{
arc("AA",d.AA); // nicely works for read & write
arc("BB",d.BB);
}
Error C2988 unrecognizable template declaration/definition
Essentially, the "DataRefType" Подструктура используется для обеспечения правильного типа параметра ( Object Const & или Object & ) в зависимости от того, используется ли операция сохранения или нагрузки. Есть работа (/лучшая) идиома для меня, чтобы «адаптировать» тип параметра d к функции transfer выше в зависимости от типа передачи передачи?>
Подробнее здесь: https://stackoverflow.com/questions/796 ... d-sub-type
Мобильная версия