Andrzej Krzemienski wrote:
Hi Everyone, First of all, I wanted to thank Peter for writing and sharing this library. A number of people already indicated it is useful, and I also have use cases that would be addressed by this library.
I would lie to clarify if my understanding of the scope of this library is correct. From the discussion so far, I understood that the goal is to provide a low-level minimum building block that enables writing more elaborate libraries for providing type introspection. The library gives me the following guarantee: if a user used macro BOOST_DESCRIBE_STRUCT for some type T (and there are no ODR violations) than I can use `boost::describe::members` to see what those members are: their name, their type, and a pointer.
If I want to use this data in a convenient way, I have to use another library atop of Boost.Describe. For instance, when I need to observe struct X as a tuple of references, I will write my own library, which:
1. Checks if Boost.PFR can figure it out automagically. If so, use this magic 2. If not, resort to Boost.Describe, and based on its interface, form a tuple of references.
The primary goal of the library is indeed to serve as a helper building block for other libraries, but I don't think the chronology as described (you'd write your own library on top of Describe) is what I had in mind. Rather, the intended use is that you already have written your own library, such as Boost.JSON. It provides customizable facilities for handling types in a certain way (value_to, value_from), and can handle a number of standard types (e.g. std::vector) by default, but not user-defined types, because it knows nothing about them. By using Describe, JSON can provide default handling for user-defined types as well, so that C++ to/from JSON conversions magically work out of the box without customizing value_to/value_from. (And the same example can be given with a serialization library, or a hashing library.) I wouldn't necessarily rule out the library being used directly by end users though. It's not very friendly in this initial form, but it's usable, and convenience functions will eventually get added.