Существует ли концепция C++ для обнаружения сериализуемых и несериализуемых типов?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Существует ли концепция C++ для обнаружения сериализуемых и несериализуемых типов?

Сообщение Anonymous »

Существует ли в C++ концепция, позволяющая отличать сериализуемые типы от несериализуемых типов (с использованием зерновых)?
Основываясь на моем незнании сериализации, существует три способа разрешить сериализацию типа:
  • Он сериализуется тривиально (с использованием функций, предоставляемых зерновыми, таких как int, std::string, std::vector и т. д.)
  • Путем предоставления функции-члена сериализации.
    Предлагая комбинацию функций-членов сохранения и загрузки.
Я мог бы придумать следующее для категорий 2 и 3. Но я не могу написать что-нибудь для обнаружения «тривиально сериализуемых» типов (т. е. категории 1).

Код: Выделить всё

template 
concept Serialize_Binary = requires(T a) {
{ a.serialize(std::declval()) };
};
template 
concept Save_Binary = requires(T a) {
{ a.save(std::declval()) };
};
template 
concept Load_Binary = requires(T a) {
{ a.load(std::declval()) };
};
template 
concept Serializable =
Serialize_Binary || (Save_Binary && Load_Binary);

Поэтому, как и ожидалось, следующее утверждение не выполняется:

Код: Выделить всё

static_assert(Serializable,"vector is not serializable");
Что я пробовал в godbolt: https://godbolt.org/z/n4cxj6s5T
Некоторые предыдущие вопросы, которые я изучал:
Использование Cereal для сериализации шаблонных полиморфных типов в библиотеке
Cereal Добавить сериализацию в существующий класс библиотеки
Сериализация Cereal std::vector

Подробнее здесь: https://stackoverflow.com/questions/786 ... able-types
Ответить

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

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

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

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

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