Как изменить шаблон подтипа [дублировать]C++

Программы на C++. Форум разработчиков
Anonymous
Как изменить шаблон подтипа [дублировать]

Сообщение Anonymous »

Я переношу старую библиотеку кодов C ++, которая использовалась для компиляции под VS2005, но доставляет мне проблемы в VS2022. Библиотека поддерживает своего рода систему для сериализации объектов на поток и восстановить их из потока.
она разработана таким образом, чтобы вы могли передать ему нагрузочный или спасательный объект, а затем написать единую функцию шаблона для вашего класса, который примет либо нагрузку, либо 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);
}
This used to compile, but with VS2022 we now get an error on the declaration at //### stating:

Error C2988 unrecognizable template declaration/definition

Essentially, the "DataRefType" Подструктура используется для обеспечения правильного типа параметра ( Object Const & или Object & ) в зависимости от того, используется ли операция сохранения или нагрузки. Есть работа (/лучшая) идиома для меня, чтобы «адаптировать» тип параметра d к функции transfer выше в зависимости от типа передачи передачи?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... d-sub-type

Вернуться в «C++»