BOOST_FUSION_ADAPT_STRUCT_NAMED и BOOST_FUSION_ADAPT_STRUCT_NAMED_NS - это макросы, которые могут быть использованы для создания всего необходимого шаблона для создания произвольной структуры моделислучайной последовательности доступа. Данная структура адаптирована с использованием данного имени.
BOOST_FUSION_ADAPT_STRUCT_NAMED(
struct_name, adapted_name,
member_name0,
member_name1,
member_name2,
...
)
BOOST_FUSION_ADAPT_STRUCT_NAMED_NS(
struct_name,
(namespace0)(namespace1)...,
adapted_name,
member_name0,
member_name1,
member_name2,
...
)
BOOST_FUSION_ADAPT_STRUCT_NAMED(
struct_name, adapted_name,
(member_type0, member_name0)
(member_type1, member_name1)
(auto, member_name2),
...
)
BOOST_FUSION_ADAPT_STRUCT_NAMED_NS(
struct_name,
(namespace0)(namespace1)...,
adapted_name,
(member_type0, member_name0)
(member_type1, member_name1)
(auto, member_name2),
...
)
Вышеуказанные макросы генерируют необходимый код для адаптацииstruct_name
в качестве моделислучайной последовательности доступапри использованииадаптированного_имя
как название адаптированной структуры. Последовательность(namespace0)пространство имен1...
объявляет пространство имен дляадаптированное_имя
. Он дает полностью квалифицированное имя дляадаптированное имя
изпространство имен:пространство имен1::Adapted_name
. Если дается пустая последовательность пространства имен (это макрос, который ни к чему не расширяется), адаптированный вид помещается в глобальное пространство имен. Если не указана последовательность пространства имен (т.е.BOOST_FUSION_ADAPT_STRUCT_NAMED
), адаптированный вид размещен в пространстве именboost:Слияние:адаптировано
. Последовательностьmember_nameN,
аргументы или(член_тип N),Member_nameN
пары обозначают тип и имена каждого из членов структуры, которые являются частью последовательности.
когда член_тип N опущен или установлен на авто, тип выведен с помощью Boost. Типоф.
Макросы должны использоваться в глобальном масштабе, иstruct_name
должно быть полностью квалифицированным именем пространства имен для преобразования структуры.
#include <boost/fusion/adapted/struct/adapt_struct_named.hpp>
#include <boost/fusion/include/adapt_struct_named.hpp>
namespace demo
{
struct employee
{
std::string name;
int age;
};
}
BOOST_FUSION_ADAPT_STRUCT_NAMED(
demo::employee, adapted_employee,
name,
age)
BOOST_FUSION_ADAPT_STRUCT_NAMED(
demo::employee, adapted_employee,
(auto, name),
(auto, age))