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

BOOST_FUSION_ADAPT_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_TPL_ADT - это макрос, который может быть использован для создания всех необходимых шаблонов для адаптации произвольного типа класса шаблонов в качестве модели Random Access Sequence.

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

Приведенный выше макрос генерирует необходимый код для адаптации type_name или произвольной специализации type_name в качестве модели Random Access Sequence. Последовательность (template_param0)(template_param1)... объявляет имена используемых параметров типа шаблона. Последовательность (специализация_param0)(специализация_param1)... объявляет параметры шаблона фактической специализации type_name, которая адаптирована как последовательность слияния. Последовательность (attribute_typeN, атрибут_const_typeN, get_exprN, set_exprN) вчетверо объявляет типы, типы const, get-выражения и set-выражения элементов, которые являются частью адаптированной последовательности синтеза. get_exprN - это выражение, которое вызывается для получения N элемента экземпляра type_name. Это выражение может иметь доступ к переменной, названной obj типа type_name или type_nameconst&, которая представляет собой базовый экземпляр type_name. attribute_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. Тип значения (то есть тип, возвращенный результат_::результат_::значение_at и результат_of::значение_at_c) атрибут_типN с удалением ссылки.

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

Header
#include <boost/fusion/adapted/adt/adapt_adt.hpp>
#include <boost/fusion/include/adapt_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;
        }
    };
}
BOOST_FUSION_ADAPT_TPL_ADT(
    (Name)(Age),
    (demo::employee) (Name)(Age),
    (Name const&, Name const&, obj.get_name(), obj.set_name(val))
    (Age const&, Age const&, obj.get_age(), obj.set_age(val)))
demo::employee<std::string, int> e;
boost::fusion::front(e)="Edward Norton";
boost::fusion::back(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_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:23:37/0.0093181133270264/1