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

Struct template extends

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 template extends

boost::proto::extends — For adding behaviors to a Proto expression template.

Synopsis

// In header: <boost/proto/extends.hpp>
template<typename Expr, typename Derived, 
         typename Domain = proto::default_domain> 
struct extends {
  // types
  typedef typename Expr::proto_base_expr          proto_base_expr;   
  typedef Domain                                  proto_domain;      
  typedef Derived                                 proto_derived_expr;
  typedef extends                                 proto_extends;     
  typedef typename proto_base_expr::proto_tag     proto_tag;         
  typedef typename proto_base_expr::proto_args    proto_args;        
  typedef typename proto_base_expr::proto_arity   proto_arity;       
  typedef typename proto_base_expr::proto_grammar proto_grammar;     
  typedef typename proto_base_expr::proto_childN  proto_childN;        // For each N in [0,max(1,proto_arity_c))
  // member classes/structs/unions
  template<typename Signature> 
  struct result {
    // types
    typedef unspecified type;
  };
  // construct/copy/destruct
  extends();
  extends(extends const &);
  extends(Expr const &);
  // public static functions
  static Derived const make(Expr const &);
  // public member functions
  proto_base_expr & proto_base();
  proto_base_expr const & proto_base() const;
  template<typename A> unspecified operator=(A &);
  template<typename A> unspecified operator=(A const &);
  template<typename A> unspecified operator=(A &) const;
  template<typename A> unspecified operator=(A const &) const;
  template<typename A> unspecified operator[](A &);
  template<typename A> unspecified operator[](A const &);
  template<typename A> unspecified operator[](A &) const;
  template<typename A> unspecified operator[](A const &) const;
  template<typename... A> unspecified operator()(A const &...);
  template<typename... A> unspecified operator()(A const &...) const;
  // public data members
  Expr proto_expr_;  // For exposition only.
  static const long proto_arity_c;  // = proto_base_expr::proto_arity_c;
};

Description

Используйте<proto::extends<>>для предоставления выражений в пользовательских элементах данных вашего домена и функциях участников.

Концептуально использование<proto::extends<>>сродни наследованию от<proto::expr<>>и добавлению собственных членов. использовать<proto::extends<>>, как правило, предпочтительнее прямого наследования, потому что члены, которые были бы унаследованы от<proto::expr<>>, были бы неправы; они неправильно отрезали бы ваших дополнительных членов при построении более крупных выражений из более мелких.<proto::extends<>>автоматически дает вашим типам экспрессии соответствующие операторские перегрузки, которые сохраняют ваши доменные члены при составлении деревьев экспрессии.

Расширения выражения обычно определяются следующим образом:

template< typename Expr >
struct my_expr
  : proto::extends<
        Expr            // The expression type we're extending
      , my_expr< Expr > // The type we're defining
      , my_domain       // The domain associated with this expression extension
    >
{
    // An expression extension is constructed from the expression
    // it is extending.
    my_expr( Expr const & e = Expr() )
      : my_expr::proto_extends( e )
    {}
    
    // Unhide proto::extends::operator=
    // (This is only necessary if a lazy assignment operator
    // makes sense for your domain-specific language.)
    BOOST_PROTO_EXTENDS_USING_ASSIGN(my_expr)
    
    /*
    ... domain-specific members go here ...
    */
};

Смотрите также:

extends public construct/copy/destruct

  1. <
    extends();
    >
  2. <
    extends(extendsconst&that);
    >
  3. <
    extends(Exprconst&expr_);
    >

extends public static functions

  1. <
    staticDerivedconstmake(Exprconst&expr);
    >

    Построить расширение выражения из базового выражения.

extends public member functions

  1. <
    proto_base_expr&proto_base();
    >

Возвращение:

<proto_expr_.proto_base()>

Броски:

Не бросят.
  • <
    proto_base_exprconst&proto_base()const;
    >

    Возвращение:

    <proto_expr_.proto_base()>

    Бросок:

    Не буду бросать.
  • <
    template<typenameA>unspecifiedoperator=(A&a);
    >

    Ленивое выражение назначения

    Возвращение:

    Новый узел выражения, представляющий операцию присвоения.

  • <
    template<typenameA>unspecifiedoperator=(Aconst&a);
    >

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

  • <
    template<typenameA>unspecifiedoperator=(A&a)const;
    >

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

  • <
    template<typenameA>unspecifiedoperator=(Aconst&a)const;
    >

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

  • <
    template<typenameA>unspecifiedoperator[](A&a);
    >

    Ленивое подстрочное выражение

    Возвращение:

    Новый узел выражения, представляющий операцию подстрочного описания.

  • <
    template<typenameA>unspecifiedoperator[](Aconst&a);
    >

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

  • <
    template<typenameA>unspecifiedoperator[](A&a)const;
    >

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

  • <
    template<typenameA>unspecifiedoperator[](Aconst&a)const;
    >

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

  • <
    template<typename...A>unspecifiedoperator()(Aconst&...a);
    >

    Ленивая функция вызывает

    Возвращение:

    Новый узел выражения, представляющий операцию вызова функции.

  • <
    template<typename...A>unspecifiedoperator()(Aconst&...a)const;
    >

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


  • PrevUpHomeNext

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




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



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


    реклама


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

    Время компиляции файла: 2024-08-30 11:47:00
    2025-05-20 09:43:42/0.0093698501586914/1