снова привет!
хочу добавить в YAS лимиты.
очевидное применение — ограничения на размеры десериализуемых контейнеров/строк.
пример:
struct type {
std::string str;
template<typename Ar>
void serialize(Ar &ar) {
ar & yas::limit(str, 32); // при десериализации длина строки ограничена 32ум символам
}
};
// ...
type t;
yas::binary_oarchive oa;
oa & t;
при десериализации, если сериализатор видит что пришла строка длинее 32 — бросает исключение.
вопроса у меня два:
1. нужно ли использовать лимиты и для сериализации?(для записи в архив) вроде как это забота юзера.
2. нужно ли использовать лимиты и для фундаментальных типов?
спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>1. нужно ли использовать лимиты и для сериализации?(для записи в архив) вроде как это забота юзера.
да.
X>2. нужно ли использовать лимиты и для фундаментальных типов?
да.
сделал два типа лимитов:
yas::limit(v, 32); // max limit
и
yas::limit(v, 32, 64); // min-max limit
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
Ещё лимиты можно задавать для типов данных на этапе компиляции. Что-то типа
constrained_type из
https://github.com/foonathan/type_safe
Т.е. типа такого
struct X
{
constrained<std::string, non_empty> name;
constrained<int, in_range<0, 150>> age;
template<typename Ar>
void serialize(Ar& ar)
{
ar & name & age;
}
};
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)