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

Struct template placeholder

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 placeholder

boost::xpressive::placeholder — For defining a placeholder to stand in for a variable a semantic action.

Synopsis

// In header: <boost/xpressive/xpressive_fwd.hpp>
template<typename T, int I = 0, typename Dummy = proto::is_proto_expr> 
struct placeholder {
  // construct/copy/destruct
  unspecified operator=(T &) const;
  unspecified operator=(T const &) const;
};

Description

Используйте<placeholder<>>для определения заполнителя места для использования в семантических действиях для обозначения реальных объектов. Использование заполнителей позволяет определять регулярные выражения с действиями один раз и повторно использовать их во многих контекстах для чтения и записи с объектов, которые не были доступны при определении регекса.

Вы можете использовать<placeholder<>>, создавая объект типа<placeholder<T>>и используя этот объект в семантическом действии точно так, как вы намереваетесь использовать объект типа<T>.

placeholder<int> _i;
placeholder<double> _d;
sregex rex = ( some >> regex >> here )
    [ ++_i, _d *= _d ];

Затем, при выполнении соответствия шаблона с<regex_search()>,<regex_match()>или<regex_replace()>, передайте объект<match_results<>>, который содержит связывания для заполнителей, используемых в семантических действиях объекта регекса. Вы можете создать привязки, позвонив<match_results::let>следующим образом:

int i = 0;
double d = 3.14;
smatch what;
what.let(_i = i)
    .let(_d = d);
if(regex_match("some string", rex, what))
   // i and d mutated here

Если выполняется семантическое действие, содержащее несвязанный заполнитель, выбрасывается исключение типа<regex_error>.

Более подробную информацию см. в разделе<xpressive::let()«Ссылка на нелокальные переменные»в руководстве для пользователей.

Пример:

// Define a placeholder for a map object:
placeholder<std::map<std::string, int> > _map;
// Match a word and an integer, separated by =>,
// and then stuff the result into a std::map<>
sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) )
    [ _map[s1] = as<int>(s2) ];
// Match one or more word/integer pairs, separated
// by whitespace.
sregex rx = pair >> *(+_s >> pair);
// The string to parse
std::string str("aaa=>1 bbb=>23 ccc=>456");
// Here is the actual map to fill in:
std::map<std::string, int> result;
// Bind the _map placeholder to the actual map
smatch what;
what.let( _map = result );
// Execute the match and fill in result map
if(regex_match(str, what, rx))
{
    std::cout << result["aaa"] << '\n';
    std::cout << result["bbb"] << '\n';
    std::cout << result["ccc"] << '\n';
}

Template Parameters

  1. <
    typenameT
    >

    Тип объекта, в котором находится этот заполнитель.

  2. <
    intI=0
    >

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

  3. <
    typenameDummy=proto::is_proto_expr
    >

placeholder public construct/copy/destruct

  1. <
    unspecifiedoperator=(T&t)const;
    >

Параметры:

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

Объект неопределенного типа, который регистрирует связь<t>с<*this>

  • <
    unspecifiedoperator=(Tconst&t)const;
    >

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


  • PrevUpHomeNext

    Статья Struct template placeholder раздела 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 20:56:45/0.0069601535797119/0