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

Struct pack

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Reference

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

Struct pack

boost::proto::pack — To turn an expression into a pseudo-parameter pack containing the expression's children, for the purpose of expanding the pack expression within a CallableTransform or ObjectTransform.

Synopsis

// In header: <boost/proto/transform/impl.hpp>

struct pack {
};

Description

proto::pack is useful within CallableTransforms and ObjectTransforms when one wishes to unpack an expression into a function call or an object constructor. proto::pack turns a Proto expression into a pseudo-parameter pack, which may appear in an unpacking pattern to be expanded with the "..." syntax.

Пример:

// The following demonstrates how to use a pseudo-pack expansion
// to unpack an expression into a function call.
struct do_sum : proto::callable
{
    typedef int result_type;
    
    int operator()(int i) const { return i; }
    int operator()(int i, int j) const { return i + j; }
    int operator()(int i, int j, int k) const { return i + j + k; }
};
// Take any n-ary expression where the children are all int terminals and sum all the ints
struct sum
  : proto::when<
  
        // Match any nary expression where the children are all int terminals
        proto::nary_expr<_, proto::vararg<proto::terminal<int> > >
        // Turn the current expression into a pseudo-parameter pack, then expand it,
        // extracting the value from each child in turn.
      , do_sum(proto::_value(proto::pack(_))...)
    >
{};
int main()
{
    proto::terminal<int>::type i = {42};
    int result = sum()( i(3,5) ); // Creates a ternary functional-call expression
    std::cout << "Sum of 42, 3, and 5 : " << result << std::endl;
}

Вышеупомянутая программа отображает:

Sum of 42, 3, and 5 : 50

В приведенном выше примере тип proto::_value(proto::pack(_)) представляет собой так называемый unpacking pattern, описанный ниже.

Unpacking Patterns:

Композитные преобразования (либо CallableTransforms, либо ObjectTransforms) обычно имеют форму X(A0,…An). Однако, когда список аргументов в композитном преобразовании завершается эллипсисом варарга в стиле С, как в X(A0,…An...), окончательный аргумент An трактуется как распаковочный шаблон.

Образец распаковки сам по себе должен быть составным преобразованием; то есть это должен быть тип функции, представляющий либо CallableTransform, либо ObjectTransform. Тип proto::pack(_) должен появиться ровно один раз в шаблоне распаковки. Этот тип получит замену при расширении распаковочного шаблона.

Композитное преобразование, подобное X(A0,…An...), при оценке по заданному выражению E, состоянию и данным, оценивается как если бы оно было X(A0,…An-1,S, где S представляет собой последовательность типов, вычисленную следующим образом:

Пусть SUB(A,B) быть функцией типа, которая заменяет каждое появление proto::pack(_) в A на B.

  • Если выражение E является терминалом (т.е. оно имеет плотность 0), S представляет собой одноэлементную последовательность, содержащую SUB(An, proto:_value).
  • Если выражение E является нетерминальным, S является последовательностью SUB(An, proto::_child_cSUB(An, proto::_child_c<M является аритмией выражения E).


PrevUpHomeNext

Статья Struct pack раздела The Boost C++ Libraries BoostBook Documentation Subset Reference может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Reference ::


реклама


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

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