BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED и BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_NS являются макросами, которые могут быть использованы для генерации всех необходимых шаблонов для создания произвольной структуры модели Random Access Sequence и Associative Sequence. Данная структура адаптирована с использованием данного имени.
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(
struct_name, adapted_name,
([member_type0,] member_name0, key_type0)
([member_type1,] member_name1, key_type1)
...
)
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_NS(
struct_name,
(namespace0)(namespace1)...,
adapted_name,
([member_type0,] member_name0, key_type0)
([member_type1,] member_name1, key_type1)
...
)
Вышеуказанные макросы генерируют необходимый код для адаптации struct_name
в качестве модели Random Access Sequence и Associative Sequence при использовании adapted_name
в качестве имени адаптированной структуры. Последовательность (namespace0)(namespace1)...
объявляет пространство имен adapted_name
. Он дает полностью квалифицированное имя для adapted_name
namespace0::namespace1::... adapted_name
. Если дается пустая последовательность пространства имен (это макрос, который ни к чему не расширяется), адаптированный вид помещается в глобальное пространство имен. Если не дана последовательность пространства имен (т.е. BOOST_FUSION_ADAPT_STRUCT_ASSOC_NAMED
), адаптированный вид помещается в пространство имен boost::adapted
. Последовательность (member_typeN, member_nameN, key_typeN)
втрое заявляет тип, имя и тип ключа каждого из членов структуры, которые являются частью последовательности.
Когда член_тип N опущен или установлен на авто, тип выведен с помощью Boost. Типоф.
Макросы должны использоваться в глобальном масштабе, и struct_name
должно быть полностью квалифицированным именем пространства имен для преобразования структуры.
#include <boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp>
#include <boost/fusion/include/adapt_assoc_struct_named.hpp>
namespace demo
{
struct employee
{
std::string name;
int age;
};
}
namespace keys
{
struct name;
struct age;
}
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(
demo::employee, adapted_employee,
(name, keys::name)
(age, keys::age))
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(
demo::employee, adapted_employee,
(auto, name, keys::name)
(auto, age, keys::age))