BOOST_FUSION_ADAPT_TPL_STRUCT Это макрос, который может быть использован для создания всех необходимых шаблонов для создания произвольной структуры шаблона моделислучайной последовательности доступа.
BOOST_FUSION_ADAPT_TPL_STRUCT(
(template_param0)(template_param1)...,
(struct_name) (specialization_param0)(specialization_param1)...,
member_name0,
member_name1
...
)
BOOST_FUSION_ADAPT_TPL_STRUCT(
(template_param0)(template_param1)...,
(struct_name) (specialization_param0)(specialization_param1)...,
(member_type0, member_name0)
(member_type1, member_name1)
(auto, member_name2),
...
)
Приведенный выше макрос генерирует необходимый код для адаптации<struct_name
>или произвольной специализации<struct_name
>в качестве моделиСлучайной последовательности доступа. Последовательность<(template_param0)(template_param1)...
>объявляет имена используемых параметров типов шаблонов. Последовательность<(specialization_param0)(specialization_param1)...
>объявляет параметры шаблона фактической специализации<struct_name
>, которая адаптирована как последовательность слияния. Последовательность<member_nameN,
>аргументов или<(member_typeN,
member_nameN)
>пар объявляет тип и имена каждого из членов структуры, которые являются частью последовательности.
когда член_тип N опущен или установлен на авто, тип выведен с помощью Boost. Типоф.
Макрос должен использоваться в глобальном масштабе, и<struct_name
>должно быть полное название структуры, подлежащей адаптации.
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
namespace demo
{
template<typename Name, typename Age>
struct employee
{
Name name;
Age age;
int employment_timestamp;
};
}
BOOST_FUSION_ADAPT_TPL_STRUCT(
(Name)(Age),
(demo::employee) (Name)(Age),
(Name, name)
(Age, age)
(auto, employment_timestamp))
BOOST_FUSION_ADAPT_TPL_STRUCT(
(Name)(Age),
(demo::employee) (Name)(Age),
name,
age,
employment_timestamp)