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

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

Сообщение Anonymous »

Существует ли в C++ концепция, позволяющая различать сериализуемые типы и несериализуемые типы (с использованием хлопьев)?
Исходя из моего понимания сериализации, существует три способа разрешить сериализацию типа:
  • Это тривиально сериализуемый (с использованием функций, предоставляемых зерновыми, таких как int, std::string, std::vector и т. д.). Документ, содержащий все поддерживаемые типы: https://uscilab.github.io/cereal/assets ... pport.html
  • путем предоставления функции-члена сериализации.< /li>
    Предлагая комбинацию функций-членов сохранения и загрузки.
Я мог бы определить следующую концепцию, чтобы различать категории 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);

Таким образом, эта концепция будет оценена как true для любого класса/структуры, принадлежащей к категории 2 или 3. Но, как и ожидалось, она будет оценена как false для всего, что относится к категории 1 (хотя я «хочу», чтобы это было оценено как истинное). Таким образом, следующее утверждение неверно:

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

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

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