Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

BOOST_FUSION_ADAPT_ASSOC_TPL_ADT

Boost , Chapter 1. Fusion 2.2 , Adapted

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

BOOST_FUSION_ADAPT_ASSOC_TPL_ADT является макросом, который может быть использован для создания всех необходимых шаблонов для адаптации произвольного типа класса шаблонов в качестве моделиСлучайной Последовательности ДоступаиАссоциативной Последовательности.

Synopsis
BOOST_FUSION_ADAPT_ASSOC_TPL_ADT(
    (template_param0)(template_param1)...,
    (type_name) (specialization_param0)(specialization_param1)...,
    ([attribute_type0, attribute_const_type0,] get_expr0, set_expr0, key_type0)
    ([attribute_type1, attribute_const_type1,] get_expr1, set_expr1, key_type1)
    ...
    )
Expression Semantics

Приведенный выше макрос генерирует необходимый код для адаптации<type_name>или произвольной специализации<type_name>в качестве моделиСлучайной последовательности доступаиАссоциативной последовательности. Последовательность<(template_param0)(template_param1)...>объявляет имена используемых параметров типа шаблона. Последовательность<(specialization_param0)(specialization_param1)...>объявляет параметры шаблона фактической специализации<type_name>, которая адаптирована в виде последовательности слияния. Последовательность<([attribute_typeN, attribute_const_typeN,>get_exprN, set_exprN, key_typeN5-ти звенья декларируют типы, типы const, get-выражения, set-выражения и ключевые типы элементов, которые являются частью адаптированной последовательности слияния.<get_exprN>является выражением, которое вызывается, чтобы получитьNэлемент экземпляра<type_name>. Это выражение может иметь доступ к переменной, названной<obj>типа<type_name&>или<type_nameconst&>, которая представляет основной экземпляр<type_name>.<attribute_typeN>и<attribute_const_typeN>может указывать типы, которые<get_exprN>обозначает, когда опущенный тип выводится из [get_exprN] возвратного типа через BOOST_TYPEOF. На компиляторе отсутствующая поддержка вариадных макросов авто может быть использована во избежание повторения типа.<set_exprN>является выражением, которое вызывается, чтобы установитьNэлемент экземпляра<type_name>. Это выражение может иметь доступ к переменным, названным<obj>типа<type_name&>, которые представляют соответствующий экземпляр<type_name>, и<val>произвольного конст-квалифицированного параметра типа шаблона ссылки<Val>, который представляет правильный операнд выражения назначения.

Фактический тип обратного доступа к внутренней последовательности синтеза (мета-) функционирует при вызове (пример)<type_name>является прокси-типом. Этот тип неявно преобразуется в тип атрибута через<get_exprN>и пересылает назначение базовому элементу через<set_exprN>. Тип значения (то есть тип, возвращаемый<result_of::value_of>,<result_of::value_of_data>,<result_of::value_at>,<result_of::value_at_c>и<result_of::value_at_key>) элементаNявляется<attribute_typeN>с удалённым конст-калификатором и ссылкой.

Макрос должен использоваться в глобальном масштабе, и<type_name>должно быть полное имя класса шаблона.

Header
#include <boost/fusion/adapted/adt/adapt_assoc_adt.hpp>
#include <boost/fusion/include/adapt_assoc_adt.hpp>
Example
namespace demo
{
    template<typename Name, typename Age>
    struct employee
    {
    private:
        Name name;
        Age age;
    public:
        void set_name(Name const& n)
        {
            name=n;
        }
        void set_age(Age const& a)
        {
            age=a;
        }
        Name const& get_name()const
        {
            return name;
        }
        Age const& get_age()const
        {
            return age;
        }
    };
}
namespace keys
{
    struct name;
    struct age;
}
BOOST_FUSION_ADAPT_ASSOC_TPL_ADT(
    (Name)(Age),
    (demo::employee) (Name)(Age),
    (Name const&, Name const&, obj.get_name(), obj.set_name(val), keys::name)
    (Age const&, Age const&, obj.get_age(), obj.set_age(val), keys::age))
demo::employee<std::string, int> e;
at_key<keys::name>(e)="Edward Norton";
at_key<keys::age>(e)=41;
//Prints 'Edward Norton is 41 years old'
std::cout << e.get_name() << " is " << e.get_age() << " years old" << std::endl;
See also

<adt_attribute_proxy>


PrevUpHomeNext

Статья BOOST_FUSION_ADAPT_ASSOC_TPL_ADT раздела Chapter 1. Fusion 2.2 Adapted может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Adapted ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:12:39/0.029159069061279/1