Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2021-03-08 14:50:01


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.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk