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

Adapting Functions

Boost , Chapter 1. Phoenix 3.2.0 , Function

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

Если вы хотите приспособить уже существующие функции или функциональные объекты, это станет репрезентативной задачей. Для этого предоставляются следующие макросы boilerplate, чтобы помочь вам адаптировать уже выходящие функции, тем самым уменьшая потребность в функциях phoenix.modules.bind.

Description

BOOST_PHOENIX_ADAPT_FUNCTION_NULLARY - это макрос, который может быть использован для генерации всего необходимого бойлерпланта, чтобы сделать произвольную нулярную функцию ленивой функцией.

[Note] Note

Эти макросы не генерируют глобальных объектов. Полученные ленивые функции являются реальными функциями, которые создают объект выражения ленивых функций

Synopsis
BOOST_PHOENIX_ADAPT_FUNCTION_NULLARY(
    RETURN_TYPE
  , LAZY_FUNCTION
  , FUNCTION
)
Semantics

Вышеупомянутый макрос генерирует весь необходимый код, чтобы иметь нулевую ленивую функцию LAZY_FUNCTION, которая называет нулевую FUNCTION, которая имеет тип возврата RETURN_TYPE

Header
#include <boost/phoenix/function/adapt_function.hpp>
Example
namespace demo
{
    int foo()
    {
        return 42;
    }
}
BOOST_PHOENIX_ADAPT_FUNCTION_NULLARY(int, foo, demo::foo)
int main()
{
    using boost::phoenix::placeholders::_1;
    assert((_1 + foo())(1) == 43);
}
Description

BOOST_PHOENIX_ADAPT_FUNCTION - это макрос, который может быть использован для генерации всего необходимого бойлерпланта, чтобы сделать произвольную функцию ленивой функцией.

Synopsis
BOOST_PHOENIX_ADAPT_FUNCTION(
    RETURN_TYPE
  , LAZY_FUNCTION
  , FUNCTION
  , FUNCTION_ARITY
)
Semantics

Приведенный выше макрос генерирует весь необходимый код, чтобы иметь ленивую функцию LAZY_FUNCTION, которая вызывает FUNCTION, которая имеет тип возврата RETURN_TYPE с FUNCTION_ARITY числом аргументов.

Header
#include <boost/phoenix/function/adapt_function.hpp>
Example
namespace demo
{
    int plus(int a, int b)
    {
        return a + b;
    }
    template <typename T>
    T
    plus(T a, T b, T c)
    {
        return a + b + c;
    }
}
BOOST_PHOENIX_ADAPT_FUNCTION(int, plus, demo::plus, 2)
BOOST_PHOENIX_ADAPT_FUNCTION(
    typename remove_reference<A0>::type
  , plus
  , demo::plus
  , 3
)
int main()
{
    using boost::phoenix::arg_names::arg1;
    using boost::phoenix::arg_names::arg2;
    int a = 123;
    int b = 256;
    assert(plus(arg1, arg2)(a, b) == a+b);
    assert(plus(arg1, arg2, 3)(a, b) == a+b+3);
}
Description

BOOST_PHOENIX_ADAPT_CALLABLE_NULLARY - это макрос, который может быть использован для генерации всего необходимого бойлерпланта, чтобы сделать произвольный объект нулевой функции ленивой функцией.

Synopsis
BOOST_PHOENIX_ADAPT_CALLABLE_NULLARY(
    LAZY_FUNCTION
  , CALLABLE
)
Semantics

Вышеупомянутый макрос генерирует весь необходимый код для создания LAZY_FUNCTION, который создает ленивый функциональный объект, представляющий собой нулевой вызов CALLABLE. Тип возврата определяется по протоколу CALLABLE, соответствующему протоколу Boost.Result Of.

Header
#include <boost/phoenix/function/adapt_callable.hpp>
Example
namespace demo
{
    struct foo
    {
        typedef int result_type;
        result_type operator()() const
        {
            return 42;
        }
    }
}
BOOST_PHOENIX_ADAPT_CALLABLE_NULLARY(foo, demo::foo)
int main()
{
    using boost::phoenix::placeholders::_1;
    assert((_1 + foo())(1) == 43);
}
Description

BOOST_PHOENIX_ADAPT_CALLABLE - это макрос, который может быть использован для генерации всего необходимого бойлерпланта, чтобы сделать объект произвольной функции ленивой функцией.

Synopsis
BOOST_PHOENIX_ADAPT_CALLABLE(
    LAZY_FUNCTION
  , FUNCTION_NAME
  , FUNCTION_ARITY
)
Semantics

Вышеупомянутый макрос генерирует весь необходимый код для создания LAZY_FUNCTION, который создает ленивый функциональный объект, представляющий собой вызов CALLABLE с аргументами FUNCTION_ARITY. Тип возврата указывается CALLABLE в соответствии с протоколом Boost.Result Of.

Header
#include <boost/phoenix/function/adapt_callable.hpp>
Example
namespace demo
{
    struct plus
    {
        template <typename Sig>
        struct result;
        template <typename This, typename A0, typename A1>
        struct result<This(A0, A1)>
            : remove_reference<A0>
        {};
        template <typename This, typename A0, typename A1, typename A2>
        struct result<This(A0, A1, A2)>
            : remove_reference<A0>
        {};
        template <typename A0, typename A1>
        A0 operator()(A0 const & a0, A1 const & a1) const
        {
            return a0 + a1;
        }
        template <typename A0, typename A1, typename A2>
        A0 operator()(A0 const & a0, A1 const & a1, A2 const & a2) const
        {
            return a0 + a1 + a2;
        }
    };
}
BOOST_PHOENIX_ADAPT_CALLABLE(plus, demo::plus, 2)
BOOST_PHOENIX_ADAPT_CALLABLE(plus, demo::plus, 3)
int main()
{
    using boost::phoenix::arg_names::arg1;
    using boost::phoenix::arg_names::arg2;
    int a = 123;
    int b = 256;
    assert(plus(arg1, arg2)(a, b) == a+b);
    assert(plus(arg1, arg2, 3)(a, b) == a+b+3);
}

PrevUpHomeNext

Статья Adapting Functions раздела Chapter 1. Phoenix 3.2.0 Function может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Function ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 23:18:37/0.007108211517334/0