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

unfused_typed

Boost , Chapter 1. Fusion 2.2 , Adapters

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
Description

Шаблон адаптера n-ary Polymorphic Function Object для унарной Polymorphic Function Object целевой функции. При вызове его аргументы объединяются в последовательность доступа Random Он передается объекту целевой функции.

Операторы вызовов результирующих функциональных объектов строго типизированы (другими словами, не шаблонизированы) с типами из Последовательности.

Тип целевой функции может быть квалифицированным или эталонным. Квалификация Const сохраняется и распространяется соответствующим образом (другими словами, можно использовать только версии const operator(), если объект целевой функции является const - или, если объект целевой функции удерживается значением, адаптер является const).

[Note] Note

Для Microsoft Visual C++ 7.1 (Visual Studio 2003) обнаружение соответствия функционального объекта легко вызывает внутреннюю ошибку. Поэтому к адаптеру всегда относятся так, как если бы он был конст.

[Tip] Tip

Если последовательность типов, переданная этому шаблону, содержит нессылочные элементы, элемент копируется только один раз - подпись оператора вызова оптимизируется автоматически, чтобы избежать параметров по значению.

Header
#include <boost/fusion/functional/adapter/unfused_typed.hpp>
Synopsis
template <class Function, class Sequence>
class unfused_typed;
Template parameters

Параметр

Описание

По умолчанию

Функция

Унарный Объект полиморфной функции

Последовательность

A Последовательность

Model of

Notation

F

Возможная константа квалифицированного, унарного Объекта полиморфной функции Тип или тип ссылки

f

Объект, конвертируемый в F

S

Последовательность типов параметров

UT

Тип unfused_typed<F,S>

ut

Пример UT, инициализированный с f

a0...aN

Аргументы к ut, конвертируемые в типы в S

Expression Semantics

Выражение

Семантика

UT(f)

Создает слитую функцию, как описано выше, инициализирует целевую функцию с f.

UT()

Создает слитую функцию, как описано выше, пытается использовать конструктор по умолчанию F.

ut(a0...aN

Звонки f с экземпляром S (или последовательность S, начиная с первого элемента, если приведено меньше аргументов и перегрузка не была отключена) инициализированы с a0...aN.

Example
struct add_assign // applies operator+=
{
    typedef void result_type; // for simplicity
    template <typename T>
    void operator()(T & lhs, T const & rhs) const
    {
        lhs += rhs;
    }
};
template <class Tie>
class fused_parallel_adder
{
    Tie tie_dest;
public:
    explicit fused_parallel_adder(Tie const & dest)
        : tie_dest(dest)
    { }
    typedef void result_type;
    template <class Seq>
    void operator()(Seq const & s) const
    {
        for_each( zip(tie_dest,s), fused<add_assign>() );
    }
};
// accepts a tie and creates a typed function object from it
struct fused_parallel_adder_maker
{
    template <typename Sig>
    struct result;
    template <class Self, class Seq>
    struct result< Self(Seq) >
    {
        typedef typename remove_reference<Seq>::type seq;
        typedef unfused_typed< fused_parallel_adder<seq>,
            typename mpl::transform<seq, remove_reference<_> >::type > type;
    };
    template <class Seq>
    typename result< void(Seq) >::type operator()(Seq const & tie)
    {
        return typename result< void(Seq) >::type(
            fused_parallel_adder<Seq>(tie) );
    }
};
unfused<fused_parallel_adder_maker> parallel_add;
void try_it()
{
    int a = 2; char b = 'X';
    // the second call is strictly typed with the types deduced from the
    // first call
    parallel_add(a,b)(3,2);
    parallel_add(a,b)(3);
    parallel_add(a,b)();
    assert(a == 8 && b == 'Z');
}
See also

PrevUpHomeNext

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




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



:: Главная :: Adapters ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 00:05:05/0.0043079853057861/0