BOOST_FUSION_DEFINE_ASSOC_TPL_STRUCT Это макрос, который может быть использован для создания всего необходимого шаблона для определения и адаптации произвольной структуры шаблона в качестве моделислучайной последовательности доступаиассоциативной последовательности.
BOOST_FUSION_DEFINE_ASSOC_TPL_STRUCT(
(template_param0)(template_param1)...,
(namespace0)(namespace1)...,
struct_name,
(member_type0, member_name0, key_type0)
(member_type1, member_name1, key_type1)
...
)
Notation
Str
Промежуточный<struct_name>
str
Пример<Str>
e0...en
Неоднородные значения
fs
Последовательность
Вышеупомянутый макрос генерирует необходимый код, который определяет и адаптирует<struct_name>как модельслучайной последовательности доступаиассоциативной последовательности. Последовательность<(template_param0)(template_param1)...>объявляет имена используемых параметров типа шаблона. Последовательность<(namespace0)(namespace1)...>объявляет пространство имен<struct_name>. Названо оно в честь<struct_name>из<namespace0::namespace1::...
struct_name>. Если дается пустая последовательность пространства имен (это макрос, который ни к чему не расширяется), структура помещается в глобальное пространство имен. Последовательность<(member_typeN,
member_nameN,
key_typeN)>тройки объявляет тип, имя и ключевой тип каждого из членов структуры, которые являются частью последовательности.
Макро следует использовать в глобальном масштабе. Семантика выражения определяется только там, где она отличается или не определена вСлучайной последовательности доступаиАссоциативной последовательности.
#include <boost/fusion/adapted/struct/define_assoc_struct.hpp>
#include <boost/fusion/include/define_assoc_struct.hpp>
namespace keys
{
struct name;
struct age;
}
BOOST_FUSION_DEFINE_ASSOC_TPL_STRUCT(
(Name)(Age), (demo), employee,
(Name, name, keys::name)
(Age, age, keys::age))