Как изменить шаблон подтипа [дублировать]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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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