mirror of
https://github.com/boostorg/fusion.git
synced 2025-08-01 05:24:44 +02:00
Fusion: BOOST_FUSION_ADAPT_ADT documentation
[SVN r65756]
This commit is contained in:
100
doc/adapted.qbk
100
doc/adapted.qbk
@@ -548,9 +548,105 @@ namespace qualified name of the struct to be converted.
|
||||
|
||||
[endsect]
|
||||
|
||||
[section:define_struct BOOST_FUSION_DEFINE_STRUCT]
|
||||
[section:adapt_adt BOOST_FUSION_ADAPT_ADT]
|
||||
|
||||
[heading Description]
|
||||
BOOST_FUSION_ADAPT_ADT is a macro than can be used to generate all the
|
||||
necessary boilerplate to adapt an arbitrary class type as a model of
|
||||
__random_access_sequence__.
|
||||
|
||||
[heading Synopsis]
|
||||
|
||||
BOOST_FUSION_ADAPT_ADT(
|
||||
type_name,
|
||||
(attribute_type0, attribute_const_type0, get_expr0, set_expr0)
|
||||
(attribute_type1, attribute_const_type1, get_expr1, set_expr1)
|
||||
...
|
||||
)
|
||||
|
||||
[heading Expression Semantics]
|
||||
|
||||
The above macro generates the necessary code to adapt `type_name`
|
||||
as a model of __random_access_sequence__.
|
||||
The sequence of
|
||||
[^(attribute_type['N], attribute_const_type['N], get_expr['N], set_expr['N])]
|
||||
quadruples declares the types, const types, get-expressions and set-expressions
|
||||
of the elements that are part of the adapted fusion sequence.
|
||||
[^get_expr['N]] is the expression that is invoked to get the ['N]th element
|
||||
of an instance of `type_name`. This expression may access a variable named
|
||||
`obj` of type `type_name&` or `type_name const&` which represents the underlying
|
||||
instance of `type_name`.
|
||||
[^attribute_type['N]] and [^attribute_const_type['N]] may specify the types
|
||||
that [^get_expr['N]] denotes to.
|
||||
[^set_expr['N]] is the expression that is invoked to set the ['N]th element
|
||||
of an instance of `type_name`. This expression may access variables named
|
||||
`obj` of type `type_name&`, which represent the corresponding instance of
|
||||
`type_name`, and `val` of an arbitrary const-qualified reference template type
|
||||
parameter `Val`, which represents the right operand of the assignment
|
||||
expression.
|
||||
|
||||
The actual return type of fusion's intrinsic sequence access (meta-)functions
|
||||
when in invoked with (an instance of) `type_name` is a proxy type.
|
||||
This type is implicitly convertible to the attribute type via [^get_expr['N]] and
|
||||
forwards assignment to the underlying element via [^set_expr['N]].
|
||||
The value type (that is the type returned by __result_of_value_of__,
|
||||
__result_of_value_at__ and __result_of_value_at_c__) of the ['N]th element
|
||||
is [^attribute_type['N]] with const-qualifier and reference removed.
|
||||
|
||||
[heading Header]
|
||||
|
||||
#include <boost/fusion/adapted/adt/adapt_adt.hpp>
|
||||
#include <boost/fusion/include/adapt_adt.hpp>
|
||||
|
||||
[heading Example]
|
||||
namespace demo
|
||||
{
|
||||
struct employee
|
||||
{
|
||||
private:
|
||||
std::string name;
|
||||
int age;
|
||||
|
||||
public:
|
||||
void set_name(std::string const& n)
|
||||
{
|
||||
name=n;
|
||||
}
|
||||
|
||||
void set_age(int a)
|
||||
{
|
||||
age=a;
|
||||
}
|
||||
|
||||
std::string const& get_name()const
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
int get_age()const
|
||||
{
|
||||
return age;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
BOOST_FUSION_ADAPT_ADT(
|
||||
demo::employee,
|
||||
(std::string const&, std::string const&, obj.get_name(), obj.set_name(val))
|
||||
(int, int, obj.get_age(), obj.set_age(val)))
|
||||
|
||||
demo::employee e;
|
||||
front(e)="Edward Norton";
|
||||
back(e)=41;
|
||||
//Prints 'Edward Norton is 41 years old'
|
||||
std::cout << e.get_name() << " is " << e.get_age() << "years old" << std::endl;
|
||||
|
||||
[heading See also]
|
||||
|
||||
__adt_attribute_proxy__
|
||||
|
||||
[endsect]
|
||||
|
||||
[section:define_struct BOOST_FUSION_DEFINE_STRUCT]
|
||||
|
||||
BOOST_FUSION_DEFINE_STRUCT is a macro that can be used to generate all the
|
||||
necessary boilerplate to define and adapt an arbitrary struct as a model of
|
||||
|
Reference in New Issue
Block a user