mirror of
https://github.com/boostorg/describe.git
synced 2026-01-20 16:32:36 +00:00
Compare commits
2 Commits
feature/de
...
feature/st
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
71bfb07be2 | ||
|
|
fc15f03c34 |
@@ -161,6 +161,18 @@ using boost::describe::operators::operator==;
|
||||
The rest of the relational operators are also provided and can
|
||||
be enabled similarly.
|
||||
|
||||
[#example_struct_to_tuple]
|
||||
## struct_to_tuple
|
||||
|
||||
This example defines a function `struct_to_tuple` that takes
|
||||
a described class type as an argument and returns a tuple of
|
||||
all its public members.
|
||||
|
||||
[source]
|
||||
----
|
||||
include::../../example/struct_to_tuple.cpp[lines=5..-1]
|
||||
----
|
||||
|
||||
[#example_to_json]
|
||||
## Automatic Conversion to JSON
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ enum class E: Base { v1, v2, ..., vN };
|
||||
BOOST_DESCRIBE_ENUM(E, v1, v2, ..., vN)
|
||||
```
|
||||
|
||||
## <boost/describe/enumerators.hpp>
|
||||
## <boost/describe/{zwsp}enumerators{zwsp}.hpp>
|
||||
|
||||
```
|
||||
namespace boost {
|
||||
@@ -332,7 +332,7 @@ Since the library does not provide a way to describe bases and members separatel
|
||||
`has_describe_bases` and `has_describe_members` are, in practice, synonyms. They
|
||||
are provided separately for consistency.
|
||||
|
||||
## <boost/describe/enum_to_string.hpp>
|
||||
## <boost/describe/{zwsp}enum_to_string{zwsp}.hpp>
|
||||
|
||||
```
|
||||
namespace boost {
|
||||
@@ -349,7 +349,7 @@ The function `enum_to_string` returns the name of the enumerator `e`. `E` must
|
||||
be a described enumeration type. If `e` does not correspond to one of the described
|
||||
values, the function returns `def`.
|
||||
|
||||
## <boost/describe/enum_from_string.hpp>
|
||||
## <boost/describe/{zwsp}enum_from_string{zwsp}.hpp>
|
||||
|
||||
```
|
||||
namespace boost {
|
||||
@@ -440,7 +440,7 @@ Returns the negated result of `operator<`.
|
||||
Outputs a representation of `t` to `os` by recursively using `operator<<`
|
||||
to output all bases and then all members.
|
||||
|
||||
## <boost/describe/descriptor_by_name.hpp>
|
||||
## <boost/describe/{zwsp}descriptor_by_name{zwsp}.hpp>
|
||||
|
||||
```
|
||||
namespace boost {
|
||||
@@ -478,7 +478,7 @@ using N = BOOST_DESCRIBE_MAKE_NAME(some_member);
|
||||
using D = descriptor_by_name<L, N>; // descriptor for SomeType::some_member
|
||||
```
|
||||
|
||||
## <boost/describe/descriptor_by_pointer.hpp>
|
||||
## <boost/describe/{zwsp}descriptor_by_pointer{zwsp}.hpp>
|
||||
|
||||
```
|
||||
namespace boost {
|
||||
|
||||
55
example/struct_to_tuple.cpp
Normal file
55
example/struct_to_tuple.cpp
Normal file
@@ -0,0 +1,55 @@
|
||||
// Copyright 2021 Peter Dimov
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// https://www.boost.org/LICENSE_1_0.txt
|
||||
|
||||
#include <boost/describe.hpp>
|
||||
#include <tuple>
|
||||
|
||||
namespace desc = boost::describe;
|
||||
|
||||
template<class T, template<class...> class L, class... D>
|
||||
auto struct_to_tuple_impl( T const& t, L<D...> )
|
||||
{
|
||||
return std::make_tuple( t.*D::pointer... );
|
||||
}
|
||||
|
||||
template<class T, class Dm = desc::describe_members<T,
|
||||
desc::mod_public | desc::mod_inherited>>
|
||||
auto struct_to_tuple( T const& t )
|
||||
{
|
||||
return struct_to_tuple_impl( t, Dm() );
|
||||
}
|
||||
|
||||
#include <boost/core/type_name.hpp>
|
||||
#include <iostream>
|
||||
|
||||
struct X
|
||||
{
|
||||
int a = 1;
|
||||
};
|
||||
|
||||
BOOST_DESCRIBE_STRUCT(X, (), (a))
|
||||
|
||||
struct Y
|
||||
{
|
||||
float b = 3.14f;
|
||||
};
|
||||
|
||||
BOOST_DESCRIBE_STRUCT(Y, (), (b))
|
||||
|
||||
struct Z: X, Y
|
||||
{
|
||||
};
|
||||
|
||||
BOOST_DESCRIBE_STRUCT(Z, (X, Y), ())
|
||||
|
||||
int main()
|
||||
{
|
||||
Z z;
|
||||
|
||||
auto tp = struct_to_tuple( z );
|
||||
|
||||
std::cout <<
|
||||
boost::core::type_name<decltype(tp)>() << ": "
|
||||
<< std::get<0>(tp) << ", " << std::get<1>(tp);
|
||||
}
|
||||
@@ -85,3 +85,4 @@ run ../example/json_rpc.cpp : : : $(CXX14) $(JSON) ;
|
||||
run ../example/hash_value.cpp : : : $(CXX14) ;
|
||||
run ../example/equality.cpp : : : $(CXX14) ;
|
||||
link ../example/console.cpp : $(CXX14) $(JSON) ;
|
||||
run ../example/struct_to_tuple.cpp : : : $(CXX14) ;
|
||||
|
||||
Reference in New Issue
Block a user