привет!
к примеру, имеем такую функцию:
template<typename... Args>
yas::shared_buffer func(Args&&... args) {
yas::mem_ostream os;
yas::binary_oarchive<yas::mem_ostream, yas::binary> oa(os);
oa & std::make_tuple(std::forward<Args>(args)...);
return os.get_shared_buffer();
}
к примеру, вызываем ее с такими аргументами —
func('a', 3, 4ull);, и получаем сериализованный архив.
на противоположной стороне пытаемся десериализовать архив в другие типы — что получим — зависит...
вопрос в том, как на стороне сериализации аргументов создать некий идентификатор сигнатуры, чтоб сериализовать его в архив перед аргументами, и проверять соответствие на противоположной стороне.
есть такой примитивный и дико оверхедный вариант: использовать
__PRETTY_FUNCTION__, в рантайме из нее выделить только сигнатуру + подсчитать хешь от полученной строки.
и да, GCC говорит что
__PRETTY_FUNCTION__ not a constant expression, хотя clang говорит что да.
ну...есть еще несколько вариантов, типа создания для стандартных типов ассоциированных ID, и добавления списка этих ID`ов в архив. но не хочется иметь гимор в виде ручного задания ассоциации для каждого нестандартного типа.
какие мысли?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)