Boost logo

Boost :

From: Edward Diener (eldiener_at_[hidden])
Date: 2021-03-08 14:26:37


On 3/8/2021 6:20 AM, Andrzej Krzemienski via Boost 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 in a template a class ( typename ) template parameter has been
Described with the BOOST_DESCRIBE_STRUCT or BOOST_DESCRIBE_CLASS macro
you will be able to use the Describe library's describe_bases<T, M> and
describe_members<T, M> function templates to introspect that template
parameter. You can do the same thing if your template parameter is an
enumeration and you can use the describe_enumerators<E> functionality.
This lets you treat class/structs and enumerations generically in
template code as to what functionality they may contain. What use you
make of the information is up to you. This is my own interpretation of
the Describe library and why I voted to ACCEPT it as being useful in
Boost. I do hope in the future of C++ that C++ reflection information
can be automatically generated by the compiler rather than manually
generated by what Peter has done and others may do, as Peter has stated
in the documentation what the limitations Describe has in regard to
class/structs. As others have pointed out also, class/structs in
third-party libraries, to which the code is not available, as in the C++
standard library, can not be manually annotated with the Describe
macros. Nonetheless the library can be certainly useful for Boost users.

>
> 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.
>
> Did I capture it correctly? In that case, requesting high-level features in
> Boost.Describe is against its design goals. It is a low-level piece, not
> necessarily to be used directly.
>
> Regard,
> &rzej;
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>


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