сопоставление сигнатур
От: niXman Ниоткуда https://github.com/niXman
Дата: 27.10.17 08:59
Оценка:
привет!

к примеру, имеем такую функцию:
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 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 27.10.2017 8:59 niXman . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.