Struct template placeholder
boost::xpressive::placeholder — For defining a placeholder to stand in for a variable a semantic action.
Synopsis
template<typename T, int I = 0, typename Dummy = proto::is_proto_expr>
struct placeholder {
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))
Если выполняется семантическое действие, содержащее несвязанный заполнитель, выбрасывается исключение типа<regex_error
>.
Более подробную информацию см. в разделе<xpressive::let()
>и«Ссылка на нелокальные переменные»в руководстве для пользователей.
Пример:
placeholder<std::map<std::string, int> > _map;
sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) )
[ _map[s1] = as<int>(s2) ];
sregex rx = pair >> *(+_s >> pair);
std::string str("aaa=>1 bbb=>23 ccc=>456");
std::map<std::string, int> result;
smatch what;
what.let( _map = result );
if(regex_match(str, what, rx))
{
std::cout << result["aaa"] << '\n';
std::cout << result["bbb"] << '\n';
std::cout << result["ccc"] << '\n';
}
Template Parameters
- <
typenameT
>Тип объекта, в котором находится этот заполнитель.
- <
intI=0
>Необязательный идентификатор, который может быть использован для отличия этого заполнителя от других, которые могут быть использованы в том же семантическом действии, которое имеет тот же тип.
- <
typenameDummy=proto::is_proto_expr
>
placeholder
public
construct/copy/destruct
- <
unspecifiedoperator=(T&t)const;
>Параметры: | |
Возвращение: | Объект неопределенного типа, который регистрирует связь<t >с<*this > |