Hacker News new | ask | show | jobs
by gmueckl 2815 days ago
Can cereal handle user defined types without having to write custom serialization and deserialization functions for each? At first glance this seems to be the main difference.
1 comments

Cereal requires a bit more copy & paste template boilerplate (it's a customization point) but they're basically the same.

* libnop uses a macro called NOP_STRUCTURE to create its key-value pairs.

* Cereal has a macro called CEREAL_NVP.

* Boost.Fusion has BOOST_FUSION_ADAPT_ASSOC_STRUCT

* Boost.Hana has BOOST_HANA_ADAPT_STRUCT

* Boost.Serialization has BOOST_SERIALIZATION_NVP

...all these things work the same way to get reflection

Yes! Hopefully C++20 or C++25-ish will provide better alternatives for compile-time reflection.

Don't forget that libnop also has NOP_EXTERNAL_STRUCTURE (and friends) to decouple the annotation from the structure definition. This is handy when you have a C ABI with C++ internal implementation. I don't recall seeing a similar facility in other libraries.

Most of the above macros work this way. Boost fusions macro will let you specify arbitrary code for getting and setting attributes.