Function template let
boost::xpressive::let — For binding local variables to placeholders in semantic actions when constructing a regex_iterator
or a regex_token_iterator
.
Synopsis
template<typename... ArgBindings> unspecified let(ArgBindings const &... args);
Description
xpressive::let()
служит той же цели, что и match_results::let()
; то есть связывает заполнитель с локальным значением. Цель состоит в том, чтобы позволить определить регекс с семантическими действиями, который относится к объектам, которые еще не существуют. Вместо того, чтобы ссылаться непосредственно на объект, семантическое действие может относиться к заполнителю, и значение заполнителя может быть определено позже с выражением let. Выражение let, созданное с помощью let()
, передается конструктору regex_iterator
или regex_token_iterator
.
Смотрите раздел «Ссылка на нелокальные переменные» в Руководстве для дальнейшего обсуждения.
Пример:
placeholder<std::map<std::string, int> > _map;
sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) )
[ _map[s1] = as<int>(s2) ];
std::string str("aaa=>1 bbb=>23 ccc=>456");
std::map<std::string, int> result;
sregex_iterator it(str.begin(), str.end(), pair, let(_map=result));
sregex_iterator end;
while(it != end)
++it;
std::cout << result["aaa"] << '\n';
std::cout << result["bbb"] << '\n';
std::cout << result["ccc"] << '\n';
Вышеприведенный код отображает:
1
23
456
Параметры: |
аргии
|
Набор связываний аргументов, где каждое связывание аргументов является выражением назначения, левая сторона которого должна быть экземпляром placeholder для некоторых X , а правая сторона представляет собой значение типа X . |
|