Сообщение сопоставление сигнатур от 27.10.2017 8:59
Изменено 27.10.2017 8:59 niXman
сопоставление сигнатур
привет!
к примеру, имеем такую функцию:
к примеру, вызываем ее с такими аргументами — func('a', 3, 4ull);, и получаем сериализованный архив.
на противоположной стороне пытаемся десериализовать архив в другие типы — что получим — зависит...
вопрос в том, как на стороне сериализации аргументов создать некий идентификатор сигнатуры, чтоб сериализовать его в архив перед аргументами, и проверять соответствие на противоположной стороне.
есть такой примитивный и дико оверхедный вариант: использовать __PRETTY_FUNCTION__, в рантайме из нее выделить только сигнатуру + подсчитать хешь от полученной строки.
и да, GCC говорит что __PRETTY_FUNCTION__ not a constant expression, хотя clang говорит что да.
ну...есть еще несколько вариантов, типа создания для стандартных типов ассоциированных ID, и добавления списка этих ID`ов в архив. но не хочется иметь гимор в виде ручного задания ассоциации для каждого нестандартного типа.
какие мысли?
к примеру, имеем такую функцию:
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)...);
}
к примеру, вызываем ее с такими аргументами — func('a', 3, 4ull);, и получаем сериализованный архив.
на противоположной стороне пытаемся десериализовать архив в другие типы — что получим — зависит...
вопрос в том, как на стороне сериализации аргументов создать некий идентификатор сигнатуры, чтоб сериализовать его в архив перед аргументами, и проверять соответствие на противоположной стороне.
есть такой примитивный и дико оверхедный вариант: использовать __PRETTY_FUNCTION__, в рантайме из нее выделить только сигнатуру + подсчитать хешь от полученной строки.
и да, GCC говорит что __PRETTY_FUNCTION__ not a constant expression, хотя clang говорит что да.
ну...есть еще несколько вариантов, типа создания для стандартных типов ассоциированных ID, и добавления списка этих ID`ов в архив. но не хочется иметь гимор в виде ручного задания ассоциации для каждого нестандартного типа.
какие мысли?
сопоставление сигнатур
привет!
к примеру, имеем такую функцию:
к примеру, вызываем ее с такими аргументами — func('a', 3, 4ull);, и получаем сериализованный архив.
на противоположной стороне пытаемся десериализовать архив в другие типы — что получим — зависит...
вопрос в том, как на стороне сериализации аргументов создать некий идентификатор сигнатуры, чтоб сериализовать его в архив перед аргументами, и проверять соответствие на противоположной стороне.
есть такой примитивный и дико оверхедный вариант: использовать __PRETTY_FUNCTION__, в рантайме из нее выделить только сигнатуру + подсчитать хешь от полученной строки.
и да, GCC говорит что __PRETTY_FUNCTION__ not a constant expression, хотя clang говорит что да.
ну...есть еще несколько вариантов, типа создания для стандартных типов ассоциированных ID, и добавления списка этих ID`ов в архив. но не хочется иметь гимор в виде ручного задания ассоциации для каждого нестандартного типа.
какие мысли?
к примеру, имеем такую функцию:
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`ов в архив. но не хочется иметь гимор в виде ручного задания ассоциации для каждого нестандартного типа.
какие мысли?