BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT Это макрос, который может быть использован для генерации всех необходимых шаблонов для создания произвольной структуры шаблона модели Random Access Sequence и Associative Sequence.
BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT(
(template_param0)(template_param1)...,
(struct_name) (specialization_param0)(specialization_param1)...,
([member_type0,] member_name0, key_type0)
([member_type1,] member_name1, key_type1)
...
)
Приведенный выше макрос генерирует необходимый код для адаптации struct_name
или произвольной специализации struct_name
в качестве модели Random Access Sequence и Associative Sequence. Последовательность (template_param0)(template_param1)...
объявляет имена используемых параметров типа шаблона. Последовательность (специализация_param0)(специализация_param1)...
объявляет параметры шаблона фактической специализации struct_name
, которая адаптирована как последовательность слияния. Последовательность ([member_typeN,] member_nameN, key_typeN)
кортежей объявляет тип, имя и тип ключа каждого из элементов структуры, которые являются частью последовательности.
Когда член_тип N опущен или установлен на авто, тип выведен с помощью Boost. Типоф.
Макрос должен использоваться в глобальном масштабе, и struct_name
должно быть полностью квалифицированным именем пространства имен для адаптированной структуры.
#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
#include <boost/fusion/include/adapt_assoc_struct.hpp>
namespace demo
{
template<typename Name, typename Age>
struct employee
{
Name name;
Age age;
};
}
namespace keys
{
struct name;
struct age;
}
BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT(
(Name)(Age),
(demo::employee) (Name)(Age),
(name, keys::name)
(age, keys::age))
BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT(
(Name)(Age),
(demo::employee) (Name)(Age),
(Name, name, keys::name)
(Age, age, keys::age))