...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
BOOST_FUSION_DEFINE_ASSOC_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 Random Access Sequence and Associative Sequence.
BOOST_FUSION_DEFINE_ASSOC_STRUCT( (namespace0)(namespace1)..., struct_name, (member_type0, member_name0, key_type0) (member_type1, member_name1, key_type1) ... )
Notation
str
An instance of struct_name
e0
...en
Heterogeneous values
fs
The above macro generates the necessary code that defines and adapts struct_name
as a model of Random
Access Sequence and Associative
Sequence. The sequence (namespace0)(namespace1)...
declares the namespace for struct_name
.
It yields to a fully qualified name for struct_name
of namespace0::namespace1::...
struct_name
. If an empty namespace
sequence is given (that is a macro that expands to nothing), the struct is
placed in the global namespace. The sequence of (member_typeN,
member_nameN,
key_typeN)
triples declares the type, name and key type of each of the struct members
that are part of the sequence.
The macro should be used at global scope. Semantics of an expression is defined only where it differs from, or is not defined in Random Access Sequence and Associative Sequence.
Expression |
Semantics |
---|---|
|
Creates an instance of |
|
Creates an instance of |
|
Copy constructs an instance of |
|
Assigns from a Forward
Sequence |
|
Access of struct member |
#include <boost/fusion/adapted/struct/define_assoc_struct.hpp> #include <boost/fusion/include/define_assoc_struct.hpp>
namespace keys { struct name; struct age; } // demo::employee is a Fusion sequence BOOST_FUSION_DEFINE_ASSOC_STRUCT( (demo), employee, (std::string, name, keys::name) (int, age, keys::age))