Fusion: BOOST_FUSION_ADAPT_ADT documentation

[SVN r65756]
This commit is contained in:
Christopher Schmidt
2010-10-04 20:50:31 +00:00
parent 21d676dd87
commit b761e0e0c0
250 changed files with 1968 additions and 1404 deletions

View File

@@ -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