$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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.